私はScintilla ( ScintillaNETではありません) を使用しており、オート コンプリート リストで使用される画像を設定しようとしています。Scintilla には、RGBA 形式のバイト/ピクセルの文字列が必要です。
この RGBA 形式に関する Scintilla の説明: (ドキュメントからの引用)
RGBA 形式では、各ピクセルのアルファ値を使用して半透明にすることができます。XPM よりも単純で、より機能的です。
データは 4 バイトのピクセル値のシーケンスで、一番上の行のピクセルから始まり、最初に左端のピクセルが続き、後続の行のピクセルが続きます。配置上の理由から、行間にギャップはありません。
各ピクセルは、赤のバイト、緑のバイト、青のバイト、アルファ バイトの順に構成されます。カラー バイトは、アルファ値によって事前に乗算されません。つまり、25% 不透明な完全に赤いピクセルは [FF, 00, 00, 3F] になります。
上記で説明した形式を誤解していると思いますが、ドキュメントはあまり明確ではありません。
私の変換方法:
PNG をこのバイト文字列に変換する関数を作成しました。
public static string ConvertFromPNG(Bitmap PNG)
{
string rgba = "";
int pixWidth = PNG.Width;
int pixHeight = PNG.Height;
for (var y = 0; y < pixHeight; y++)
{
for (var x = 0; x < pixWidth; x++)
{
Color pix = PNG.GetPixel(x, y);
rgba += pix.R.ToString("X2") + pix.G.ToString("X2") + pix.B.ToString("X2") + pix.A.ToString("X2");
}
}
return rgba;
}
結果の画像:
しかし、Scintilla は画像を灰色のボックスとして表示しているだけです。
.
問題のイメージは、 Microsoft の Babel イメージの1 つのコピーです: .
興味深いことに、バイトのセットが正しいことはわかっています。なぜなら、それらを行でフォーマットしてズームアウトすると、画像の輪郭が見えるからです。
生成されたバイト数:
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009F000000EC0000001B00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000815B0000DF9B0000F8000000B40000002F000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001B0000007F4E0000FDC80000FFFF0000FF720000FF1D0000B50000003E00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001613000085350000FFDE0000FFFF0000FFFF0000FFFF0000FF750000FF230000C4000000240000000000000000000000000000000000000000000000000000000000000000000000000000000000000085400000EADB0000FFF90000FFFF0000FFFF0000FFFF0000FFF60000FFA70000F5000000DA00000000000000000000000000000000000000000000000000000000000000000000000000000091810000EACA0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFBB0000FF460000FF000000FF000000000000000000000000000000000000000000000000000000000000000000000000000000FF7E0000FFE80000FFFF0000FFFF0000FFFF0000FFFB0000FFB30000FF460000FF0C0000FF000000FF000000000000000000000000000000000000000000000000000000000000000000000000000000FF000000FF660000FFFF0000FFFF0000FFFF0000FFC70000FF0D0000FF590000FF7A0000FF000000FF000000000000000000000000000000000000000000000000000000000000000000000000000000FF8C0000FF7D0000FF2E0000FFFF0000FFBB0000FF1C0000FF510000FFB40000FF7B0000FF000000FF000000000000000000000000000000000000000000000000000000000000000000000000000000FFE20000FFE40000FF410000FF8B0000FF510000FF350000FFB60000FF8F0000FF3A0000EA00000091000000000000000000000000000000000000000000000000000000000000000000000000000000DA910000F5F30000FFFF0000FF0C0000FF270000FFC10000FF930000FF220000EA0000008500000000000000000000000000000000000000000000000000000000000000000000000000000000000000241D0000C4870000FFFF0000FF270000FF420000FF9E0000FF230000FF090000860000001600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003E2D0000B5610000FF120000FF1C0000FF370000FD0000007F0000001B000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002E000000B4000000F8000000DF00000081000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001B000000EC0000009F0000000000000000000000000000000000000000