c ++ WINAPI如何存储BI_RGB 32位像素?

时间:2016-07-27 15:02:37

标签: java c++ windows bitmap java-native-interface

我通过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]

下面的图片可以更好地解释我的问题:

problem

0 个答案:

没有答案