我正在尝试将包含24位位图文件数据的字节数组加载到Android中的Bitmap对象中,但我遇到了问题,因为Bitmap仅支持32位和16位格式。为了将24位数据转换为32位,我想到了以下方法:
byte[] file = new byte[is.available()];
is.read(file);
is.close();
byte[] paddedFile = new byte[file.length + file.length / 3]; //we will be adding 1 more byte (alpha value) for each RGB triplet
for (int i = 0; i < file.length / 3; i++) {
paddedFile[i * 4] = file[i * 3];
paddedFile[i * 4 + 1] = file[i * 3 + 1];
paddedFile[i * 4 + 2] = file[i * 3 + 2];
paddedFile[i * 4 + 3] = -1; //manually added alpha channel
}
Bitmap screen = Bitmap.createBitmap(479, 616, Bitmap.Config.ARGB_8888); //exact dimensions of the 24-bit bitmap file
screen.copyPixelsFromBuffer(ByteBuffer.wrap(paddedFile));
iv.setImageBitmap(screen);
它有点/几乎能用。这是我正在使用的位图:
而上面的代码所显示的结果如下:
为什么会扭曲?非常感谢任何有关如何解决此问题的线索。
createBitmap
方法。 - Harald K