【发布时间】:2016-10-04 02:52:06
【问题描述】:
我正在逐个像素地显示图像。所有的蓝色看起来都是黄色的。我怀疑问题出在 PalletteData 或以下行(Pixel 对象只保存颜色的 int 表示):
p = (pixel.Alpha<<24) | (pixel.Red<<16) | (pixel.Green<<8) | pixel.Blue;
注意:由于调用是通过 JNI 从 Java 到 C++,所以有一些转换:
每种颜色都被读入一个无符号字符。然后将其转换为 char 以通过 JNI。然后在 Java 端被读取为一个字节。然后转换为 Int
这里是完整列表。你能看出我的问题是什么吗?
PaletteData palette=new PaletteData(0xff0000,0x00ff00,0xff);
ImageData imageData = new ImageData(width, height,32,palette);
int pixelVecLoc=0;
for (int h = 0; h<1300; h++)
{
for (int w = 0; w<1300; w++)
{
int p = 0;
Pixel pixel = pixelVec.get(pixelVecLoc);
p = (pixel.Alpha<<24) | (pixel.Red<<16) | (pixel.Green<<8) | pixel.Blue;
imageData.setPixel(w, h, p);
pixelVecLoc++;
}
}
imageData = imageData.scaledTo(600, 500);
Image image = ImageDescriptor.createFromImageData(imageData).createImage();
//Image image = new GVImageProcessingJNIWrapper().GetBMPFromGTX();
e.gc.drawImage(image, 0, 0);
【问题讨论】:
-
@gpasch 我不明白你的评论
-
您能否提供有关
Pixel类以及如何生成像素的更多信息?是否有可能pixel.Blue的值大于0xff,导致高位泄漏到绿色通道中? -
@Alden。好点子。我现在更新了。可以在 Java 端发出字节到 Int 的转换
-
@Robben_Ford_Fan_boy 其他颜色是否正确?例如,您是否尝试将代码与红色图像一起使用?红色是否正确显示?
标签: java image image-processing bitmap swt