배열을 이미지로 채우고싶은데 가능한가요
참조변수인 Bitmap이 아닌 실제 이미지 데이터를 저장하시겠다는건가요...
디코딩된 이미지는 용량이 어마어마합니다... ARGB8888같은경우 픽셀당 4바이트인데...
480 * 800 이미지라면 480*800*4 = 1,536,000 바이트입니다...
배열에 채워진다는것은 네이티브 힙 용량을 사용하고, 참조가 유지되고 있다는건데...
그냥 File경로 또는 Resource ID를 배열관리하시고 화면에 표시 될때만 디코딩해서 사용하세요...
굳이 하시겠다면;;; 아래 메서드로 byte배열로 전환하셔서.. 배열로 관리하세요...
static public byte[] getByteArrayFromBitmap(Bitmap bitmap) {
// bitmap이 null이면 null을 리턴합니다.
if (bitmap == null)
return null;
// Byte배열 아웃풋 스트림을 생성하고
final ByteArrayOutputStream stream = new ByteArrayOutputStream();
// 스트림에 비트맵을 기록합니다.
bitmap.compress(CompressFormat.PNG, 100, stream);
// 스트림을 Byte배열로 전환합니다.
byte[] byteArray = stream.toByteArray();
// 리턴
return byteArray;
}
예상되는 오류...
OutOfMemory
로그인 유지
참조변수인 Bitmap이 아닌 실제 이미지 데이터를 저장하시겠다는건가요...
디코딩된 이미지는 용량이 어마어마합니다... ARGB8888같은경우 픽셀당 4바이트인데...
480 * 800 이미지라면 480*800*4 = 1,536,000 바이트입니다...
배열에 채워진다는것은 네이티브 힙 용량을 사용하고, 참조가 유지되고 있다는건데...
그냥 File경로 또는 Resource ID를 배열관리하시고 화면에 표시 될때만 디코딩해서 사용하세요...
굳이 하시겠다면;;; 아래 메서드로 byte배열로 전환하셔서.. 배열로 관리하세요...
static public byte[] getByteArrayFromBitmap(Bitmap bitmap) {
// bitmap이 null이면 null을 리턴합니다.
if (bitmap == null)
return null;
// Byte배열 아웃풋 스트림을 생성하고
final ByteArrayOutputStream stream = new ByteArrayOutputStream();
// 스트림에 비트맵을 기록합니다.
bitmap.compress(CompressFormat.PNG, 100, stream);
// 스트림을 Byte배열로 전환합니다.
byte[] byteArray = stream.toByteArray();
// 리턴
return byteArray;
}