본문 바로가기

소프트웨어/Android/Java/Ndk

Android] URL을 이용하여 Bitmap을 생성하고 ImageView에 적용하기

Cache Test를 하면서 기본적인 Bitmap을 다뤄야 했다. 그 중 첫번째 순서는 이미지 URL을 갖고 Bitmap을 생성하고, 생성된 Bitmap을 바탕으로 ImageView에 출력을 하는 것이다.


URL을 바탕으로 Bitmap을 얻는 Bitmap getBitmap(String url)의 구현은 아래와 같다

bitmap을 얻기에 앞서서 permission으로 


 

를 추가하여야 한다.

/**
	 * image url을 받아서 bitmap을 생성하고 리턴합니다
	 * @param url 얻고자 하는 image url
	 * @return 생성된 bitmap
	 */
	private Bitmap getBitmap(String url) {
		URL imgUrl = null;
		HttpURLConnection connection = null;
		InputStream is = null;

		Bitmap retBitmap = null;

		try{
			imgUrl = new URL(url);
			connection = (HttpURLConnection) imgUrl.openConnection();
			connection.setDoInput(true); //url로 input받는 flag 허용
			connection.connect(); //연결
			is = connection.getInputStream(); // get inputstream
			retBitmap = BitmapFactory.decodeStream(is);
		}catch(Exception e) {
			e.printStackTrace();
			return null;
		}finally {
			if(connection!=null) {
				connection.disconnect();
			}
			return retBitmap;
		}
	}




HttpURLConnection Class를 이용해서 URL Class에 등록된 주소를 바탕으로 연결을 open한다.

그 후 Connection input을 허용하기 위해 setDoInput(bool) method를 통해 flag를 true로 바꿔준다.(안하면 input값을 받을 수 없다고 한다)

InputStream으로 connection의 Stream을 받고 BimapFactory의 decodeStream method를 통해 Bitmap을 생성하고 return한다.

여기서는 URL을 사용하였기 때문에 decodeStream method를 사용하였지만, File 혹은 FileDescriptor등을 이용하는 방법은 다른 method들을 이용하면 된다. 




이렇게 생성된 Bitmap을 바탕으로 ImageView를 출력하는 방법은 아래와 같다.


imgSample1 = (ImageView)findViewById(R.id.imgSample1);		
		new Thread(new Runnable() {
			public void run() {
				try {
					bitmapSample1 = getBitmap(imgUrl);
				}catch(Exception e) {

				}finally {
					if(bitmapSample1!=null) {
						runOnUiThread(new Runnable() {
							@SuppressLint("NewApi")
							public void run() {
								imgSample1.setImageBitmap(bitmapSample1);
							}
						});			
					}
				}
			}
		}).start();


imgSample1은 ImageView 객체이고, bitmapSample1은 위에서 만든 getBitmap(String)을 이용해 얻은 Bitmap이다.


출력 화면은 아래와 같다.