【问题标题】:Java SWT: Displaying image Pixel by Pixel but Blues look YellowJava SWT:逐像素显示图像,但蓝色看起来是黄色
【发布时间】: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


【解决方案1】:

我明白了!!!这是从字节到整数的转换。

我需要使用这个:

Byte.toUnsignedInt

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-11-23
    • 2022-12-19
    • 2016-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-25
    • 2019-09-17
    相关资源
    最近更新 更多