바이트 배열을 비트 맵으로 변환하는 방법


123

이미지를 SQLite DataBase. 내가 사용하여 저장하기 위해 노력 BLOB하고 String두 경우 모두에 이미지를 저장하고 검색 할 수 있습니다하지만 난으로 변환 할 때, Bitmap사용 BitmapFactory.decodeByteArray(...)을 널 (null)을 반환합니다.

이 코드를 사용했지만 null을 반환합니다.

Bitmap  bitmap = BitmapFactory.decodeByteArray(blob, 0, blob.length);

4
이 페이지의 "관련"섹션에서 처음 5-10 개의 링크를 읽으십시오.
Mat

2
데이터베이스에 쓰기 전에 비트 맵을 인코딩 했습니까?
Ronnie

답변:


284

이것을 시도하십시오 :

Bitmap bitmap = BitmapFactory.decodeFile("/path/images/image.jpg");
ByteArrayOutputStream blob = new ByteArrayOutputStream();
bitmap.compress(CompressFormat.PNG, 0 /* Ignored for PNGs */, blob);
byte[] bitmapdata = blob.toByteArray();

경우 bitmapdata다음 점점 바이트 배열 Bitmap과 같이 수행된다 :

Bitmap bitmap = BitmapFactory.decodeByteArray(bitmapdata, 0, bitmapdata.length);

디코딩 된를 반환 Bitmap하거나 null이미지를 디코딩 할 수없는 경우를 반환합니다 .


2
당신이에서 디코딩하려고하는 것을 다른 형식 인 경우 이미지를 디코딩 할 수없는
lxknvlk

2
이러한 작업을 순서대로 여러 번 수행해야하는 경우 어떻게합니까? 매번 새 Bitmap 객체를 만드는 데 리소스가 많이 소모되지 않습니까? 어떻게 든 내 배열을 기존 비트 맵으로 디코딩 할 수 있습니까?
Alex Semeniuk 2015

이미지 픽셀의 버퍼가 있으면 다른 답변을 게시합니다. 내 버퍼에 with, 높이 및 색상이 없기 때문에 항상 null이되었습니다. 도움이 되었기를 바랍니다.
줄리안

31

Uttam의 대답은 저에게 효과가 없었습니다. 내가 할 때 방금 null이 생겼습니다.

Bitmap bitmap = BitmapFactory.decodeByteArray(bitmapdata, 0, bitmapdata.length);

필자의 경우 비트 맵 데이터에는 픽셀 버퍼 만 있으므로 decodeByteArray 함수가 너비, 높이 및 색상 비트가 사용하는 것을 추측하는 것은 불가능합니다. 그래서 나는 이것을 시도했고 효과가 있었다.

//Create bitmap with width, height, and 4 bytes color (RGBA)    
Bitmap bmp = Bitmap.createBitmap(imageWidth, imageHeight, Bitmap.Config.ARGB_8888);
ByteBuffer buffer = ByteBuffer.wrap(bitmapdata);
bmp.copyPixelsFromBuffer(buffer);

다른 색상 옵션은 https://developer.android.com/reference/android/graphics/Bitmap.Config.html 을 확인 하십시오.


2
mBitmaps는 무엇입니까?
user924 apr.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.