我正在使用 Eclipse Window Builder Editor 构建一个 GUI。我用 Gridlayout 制作了一个 Composite,并在里面放了一个 Label。另一个类的一些方法会生成一个原始的 8 位 1280x1024 灰度图像,该图像保存在一个字节数组中。这就是我在 mainMethod 中生成 ImageData 等的方式:
Color white = display.getSystemColor(SWT.COLOR_WHITE);
Color black = display.getSystemColor(SWT.COLOR_BLACK);
PaletteData palette = new PaletteData( 255, 255, 255 );
imgData = new ImageData(1280, 1024, 8, palette);
imgLabel = new Label(composite_3, SWT.NONE);
imgLabel.setImage(null);
imgLabel.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));
我仍然无法理解我应该对 PaletteData 做什么,因为无论如何我都不需要颜色。(颜色)深度应该是 8,因为我希望它有 255 个灰度值?
这是我的 setImg 方法,一旦 byte[] 充满数据,就会从另一个线程调用它:
public static void setImg(final byte[] b) {
Display.getDefault().syncExec( new Runnable() {
@Override
public void run() {
imgData.setPixels(0, 0, 1280, b, 0);
img = new Image(Display.getCurrent(), imgData);
Image grayImg = new Image(Display.getCurrent(), img, SWT.IMAGE_GRAY);
imgLabel.setImage(img);
// img.dispose();
}
});
}
我试过了
imgLabel.setImage(img);
和
imgLabel.setImage(grayImg);
好的,第一行现在可以正确显示...看来我只能使用 imgData.setPixels(...) 设置 1 行像素,这在 imo 中是无用的,还是我做错了什么?