하나의 안드로이드 앱에서 다룰 수 있는 메모리의 한계 때문에 큰 사이즈 이미지는 OutofMemory exception이나 퍼포먼스 문제가 생길 수 있다. 작은 뷰의 크기에 맞지 않는 고해상도의 이미지를 불러오는 것은 괜한 리소스를 낭비하게 만든다.
=== BitMap.java === |
import android.content.Context; |
Bitmap myImage = BitmapFactory.decodeFile(“/sdcard/car1.jpg”); BitmapFactory.decodeFile() : 로컬에 존재하는 파일을 그대로 읽어올 때 쓴다. 파일경로를 파라미터로 넘겨주면 FileInputStream 을 만들어서 decodeStream 을 한다. Canvas.drawBitmap() 은 비트맵 이미지를 캔버스에 출력하는 함수 - 1번째 파라미터는 비트맵 이미지 객체, 2번째 파라미터는 원본 이미지의 영역좌표, - 3번째 파라미터는 이미지가 표시되는 화면상의 영역좌표, 4번째 파라미터는 Paint 객체 - 2번째와 4번째파라미터는 생략 가능하다. |
=== MainActivity.java === |
import android.support.v7.app.AppCompatActivity; |
에 자동으로 줄이는 함수가 있어서 이걸 이용해서 테스트 해봤다.
BitmapFactory.Options : BitmapFactory 가 사용하는 옵션클래스이다.
Options 객체를 생성하고 설정하고자 하는 옵션을 넣은후 BitmapFactory 의 함수 실행시 파라미터로 넘기면된다.
inSampleSize : decode 시 얼마나 줄일지 설정하는 옵션인데 1보다 작을때는 1이 된다.
1보다 큰값일 때 1/N 만큼 이미지를 줄여서 decoding 하게 된다. 보통 2의 배수로 설정한다.
import android.content.Context; int reqWidth, int reqHeight) { |
이미지 출력 결과
Bitmap resize = resize_decodeResource(getResources(), R.drawable.car2, 100, 100);
에서 width 와 height 지정된 크기로 이미지가 줄어드는게 아니라 원래 이미지 크기가 width 와 height 중에서 작은 것 기준으로 맞춰서 줄여진다.
그래서 높이 기준으로 줄여주는 걸로 수정을 했다.
protected void onDraw(Canvas canvas){ |
'안드로이드 > Android Image' 카테고리의 다른 글
[안드로이드] 이미지 파일 다운로드 (0) | 2017.09.21 |
---|---|
[안드로이드] 사진촬영 이미지 파일 서버 전송(PHP 서버 소스부분) (0) | 2017.09.19 |
[안드로이드] 사진촬영, 갤러리 CROP 후 이미지 업로드 (0) | 2017.09.19 |
안드로이드 사진 촬영, 이미지 OKHttp 이용 서버 업로드 (1) | 2017.08.31 |
안드로이드 이미지 파일 OKHttp 라이브러리를 이용한 서버 업로드 (3) | 2017.08.29 |