我通过JNI向C ++发送位图,当我发送24位位图时,代码运行良好,但切换到32位显示像素不是100%正确。
位图标题信息包含:
BITMAPINFO bmi = { 0 };
bmi.bmiHeader.biBitCount = 32;//24 works
bmi.bmiHeader.biCompression = BI_RGB;
我计算步幅如下:
((width * bmi.bmiHeader.biBitCount + 31) / 32) * 4
然后在Java方面我做
final byte[] bytes = getJNIImageBytes();
final BufferedImage image = new BufferedImage(size.width, size.height, BufferedImage.TYPE_4BYTE_ABGR);
image.setData(Raster.createInterleavedRaster(new DataBufferByte(bytes, bytes.length), size.width,
size.height, ((size.width * 32 + 31) / 32) * 4, 4, new int[]{2, 1, 0, 3}, null));//2,1,0,3 = BGRA to RGBA
像RGB[217, 20, 95]
这样的像素显示正确,但预期RGB[113, 167, 199]
的像素显示为RGB[240, 240, 240]
下面的图片可以更好地解释我的问题: