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で何をすべきかを正確に理解するのにまだ問題があります。(色) 255 のグレー値が必要なため、深さは 8 にする必要がありますか?
これは、byte[] にデータが入力されるとすぐに別のスレッドから呼び出される setImg メソッドです。
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のようなものですか、それとも何か間違っていますか?