【发布时间】:2010-11-23 06:58:42
【问题描述】:
给定图像的宽度、高度、深度和字节数组,我需要创建一个 SWT Image 对象。目前,我在给定 8 位图像的数据时没有问题。
int imageWidth;
int imageHeight;
int depth;
byte[] imageBytes;
//calculate the values
imageData = new ImageData( imageWidth, imageHeight, depth, new PaletteData(255,255,255), 1, imageBytes);
new Image( display, imageData );
我遇到的问题是,对于 16 位图像,颜色有点偏。应该是黑色的像素实际上是灰色的。
对于 32 位图像,仅显示几个黑色像素,图像的其余部分为白色。
有什么想法吗?
谢谢。
编辑:imageBytes 数组是从我无法获得规范的专有图形文件中读取的(因此我不完全确定格式)。
我能够在 32 位图像上取得一些进展。看起来 32 位图像是 RGBAX 格式之一。我把它转换成24位图像,现在和16位图像有同样的问题(灰色应该是黑色)。
imageBytes 数组的大小为 (width * height * (depth/8) ),其中深度以位为单位。
我尝试更改每个像素的字节顺序,但并没有解决问题。在应该是纯黑色的区域中,它要么是黑色,要么是白色和黑色的混合物,要么是全白色。
【问题讨论】:
-
听起来解决问题的关键是了解您正在处理的专有格式。除非您完全理解格式,否则您在读取 16 位或 32 位图像时可能没有正确填充
imageBytes。这意味着问题可能发生在您发布的代码执行之前。如果您共享图像、您用于阅读图像的完整代码以及您获得的结果的屏幕截图,您可能能够在理解图像格式方面获得帮助。没有这些信息,我或其他任何人都无能为力。
标签: java image image-processing swt rgb