我從JNI調用中獲取一個字節數組,並試圖用它構造一個Bitmap對象。在Android中以位圖形式呈現一個字節[]
我的問題是,下面的代碼,返回null。
byte[] image = services.getImageBuffer(1024, 600);
Bitmap bmp = BitmapFactory.decodeByteArray(image, 0, image.length);
有關它的任何提示?
PS:像素佈局是BGR,而不是RGB。
我從JNI調用中獲取一個字節數組,並試圖用它構造一個Bitmap對象。在Android中以位圖形式呈現一個字節[]
我的問題是,下面的代碼,返回null。
byte[] image = services.getImageBuffer(1024, 600);
Bitmap bmp = BitmapFactory.decodeByteArray(image, 0, image.length);
有關它的任何提示?
PS:像素佈局是BGR,而不是RGB。
的decodeByteArray真的doens不能使用這種格式。我從BGR手動更改爲RGB。
byte[] image = services.getImageBuffer(1024, 600);
Bitmap bmp = Bitmap.createBitmap(1024, 600, Bitmap.Config.RGB_565);
int row = 0, col = 0;
for (int i = 0; i < image.length; i += 3) {
bmp.setPixel(col++, row, image[i + 2] & image[i + 1] & image[i]);
if (col == 1024) {
col = 0;
row++;
}
然而,
for (i < image.length) 。。。bmp.setPixel(image[i + 2] & image[i + 1] & image[i]);
可引起:
08-29 14:34:23.460:ERROR/AndroidRuntime(8638):java.lang.ArrayIndexOutOfBoundsException
該文檔說如果圖像無法解碼,該方法返回「null」。 你可以試試:
byte[] image = services.getImageBuffer(1024, 600);
InputStream is = new ByteArrayInputStream(image);
Bitmap bmp = BitmapFactory.decodeStream(is);
即使我不認爲它會改變,雖然做任何事情.. 嘗試有在android.graphics.BitmapFactory.Options看看還有
您是否測試過圖像字節數組包含正確的內容?否則你的代碼對我來說看起來不錯。 – mreichelt 2011-01-13 18:51:56
是的,我做到了。內容是正確的,decodeByteArray不明白這一點。 – 2011-01-14 18:49:44