JNI-C++;无法正确显示Java 32位图像 我有以下的JNI/P> C++代码

JNI-C++;无法正确显示Java 32位图像 我有以下的JNI/P> C++代码,java,c++,colors,bitmap,java-native-interface,Java,C++,Colors,Bitmap,Java Native Interface,下面是创建32位BuffereImage的Java代码,大小也是通过JNI接收的 一切似乎都很正常,只是我的图片中有一些奇怪的颜色,我不知道如何正确处理 图像的结果:这不只是颜色成分顺序的混合吗 我不熟悉这些函数中的任何一个,但我相信DIB_RGB_COLORS会按顺序为您提供组件,而TYPE_4BYTE_ABGR则希望组件按顺序排列。看起来您需要在通道混频器中再花几分钟来找出哪个RGB->{BGR,BRG,RBG,GBR…}是正确的。也许还需要一个值反转(请注意:我没有读到任何关于所涉及的格式

下面是创建32位BuffereImage的Java代码,大小也是通过JNI接收的

一切似乎都很正常,只是我的图片中有一些奇怪的颜色,我不知道如何正确处理


图像的结果:

这不只是颜色成分顺序的混合吗


我不熟悉这些函数中的任何一个,但我相信
DIB_RGB_COLORS
会按顺序为您提供组件,而
TYPE_4BYTE_ABGR
则希望组件按顺序排列。

看起来您需要在通道混频器中再花几分钟来找出哪个RGB->{BGR,BRG,RBG,GBR…}是正确的。也许还需要一个值反转(请注意:我没有读到任何关于所涉及的格式的内容。顺便说一下,屏幕截图现在看起来是这样的)这一定是因为第四个字节(保留/alpha)。我已经相应地更新了我的答案。如果在调用
GetDIBits
之后,
bi.biCompression
bi\u RGB
,那么我想你可以手动交换
rawPixels
中的字节(将其解释为
\uu int32*
并运行
*pixel=(*pixel>>8)|(在Java中,像素不是通过创建“IndexColorModel”来实现的。我确实希望发送字节以保持尽可能高的性能。我不喜欢图形,所有的帮助都很好。或者我应该使用DIB_PAL_颜色并创建一个HPALETTE并相应地移动像素吗?我该如何解决这个问题?