【问题标题】:JNI C++ to Java 32 bit image not showing properlyJNI C++ 到 Java 32 位图像未正确显示
【发布时间】:2015-09-02 20:43:43
【问题描述】:

我有以下用于 JNI 的 C++ 代码

以及下面的Java代码创建一个32bit bufferedimage,大小也是通过JNI接收的

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

图像结果:

【问题讨论】:

  • 看起来您需要在通道混音器中再花几分钟来找出哪个 RGB -> {BGR,BRG,RBG,GBR...} 是正确的。也许还需要一个值反转(请注意:我还没有阅读有关所涉及格式的任何内容。只是按照屏幕截图现在的样子)

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


【解决方案1】:

这不只是按颜色分量的顺序混合吗?

我不熟悉这些函数中的任何一个,但我相信DIB_RGB_COLORS 为您提供“blue, green, red, reserved” 顺序中的组件,而TYPE_4BYTE_ABGR 期待“alpha, blue, green, red” 顺序中的组件。

【讨论】:

  • 这一定是因为第 4 个字节(保留 / alpha)。我已经相应地更新了我的答案。
  • 看到只有 TYPE_4BYTE_ABRG 和 TYPE_4BYTE_ABRG_PRE 并且两者似乎都不起作用,我该怎么办。
  • 如果在调用GetDIBits 之后bi.biCompressionBI_RGB,那么我想您可以手动交换rawPixels 中的字节(将其解释为__int32* 并在每个4 上运行*pixel = (*pixel >> 8) | (pixel << 24) -字节像素)。如果bi.biCompression 不是 BI_RGB,那么像素可能会被 RLE 压缩并且会更复杂。
  • 在 Java 中这不可能通过创建“IndexColorModel”来实现。我真的很想发送字节以保持尽可能高的性能。我不喜欢图形,欢迎所有帮助
  • 或者我应该使用 DIB_PAL_COLORS 并创建一个 HPALETTE 并相应地移动像素?我该如何解决这个问题?
猜你喜欢
  • 1970-01-01
  • 2011-10-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多