イメージの幅、高さ、深さ、およびバイト配列を指定すると、SWT Imageオブジェクトを作成する必要があります。現在、私は8ビットイメージのデータを与えられても問題はありません。バイト配列から16または32ビットイメージを作成する
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形式の1つであるように見えます。私はそれを24ビットイメージに変換しましたが、今は16ビットイメージと同じ問題があります(グレーは黒でなければなりません)。
imageBytes配列のサイズは、奥行きがビット単位の(width * height *(depth/8))です。
各ピクセルのバイト順序を変更しようとしましたが、問題は解決しませんでした。真っ黒でなければならない区域では、黒、白と黒の混合物、またはすべて白である。
あなたの問題を解決する鍵は、あなたが扱っている独自のフォーマットを理解することです。書式を完全に理解していない限り、16ビットまたは32ビットのイメージを読み込むときに 'imageBytes'を正しく設定していない可能性があります。つまり、投稿したコードが実行される前に問題が発生している可能性があります。画像を共有している場合は、それを読むために使用しているコード全体と、取得した結果のスクリーンショットを見ると、画像フォーマットを理解する助けを得ることができます。その情報がなければ、私や他の誰かができることはそれほど多くありません。 – misha