質問
中央に10 x 10の正方形の透明なギャップがある小さな32 x 32ピクセルの正方形を生成しようとしています。
これは私がこれまでに持っているものです:
private Image CreatePicture(){
// Create a new Bitmap object, 32 x 32 pixels in size
Bitmap canvas = new Bitmap(32,32,System.Drawing.Imaging.PixelFormat.Format16bppRgb555);
for(int i=10;i<21;i++){
for(int p=10;p<21;p++){
canvas.SetPixel(i,p,Color.Lime);
}
}
canvas.MakeTransparent(Color.Lime);
// return the picture
return canvas;
}
これは大雑把で、最終的な「最適化されたバージョン」にはなりません。その大まかなデモスクリプトです。問題は、返された画像が透明ではなく、単に灰色のボックスになっていることです:(。
ご協力ありがとうございます。
マイケル
更新: PixelFormatをAlpha RGB形式に設定してスクリプトを更新しましたが、実行時にエラーなしで実際に受け入れられます。ただし、「canvas.MakeTransparent(Color.Lime);」を削除すると、行の中央にライムボックスが表示され、灰色の背景と同じ色の灰色のボックスが表示されます。透明性をほのめかすだけでなく、透明性が認識されているように見えます!
private Bitmap CreatePicture(){
// Create a new Bitmap object, 50 x 50 pixels in size
Bitmap canvas = new Bitmap(82,82,System.Drawing.Imaging.PixelFormat.Format32bppArgb);
for(int i=10;i<71;i++){
for(int p=10;p<71;p++){
canvas.SetPixel(i,p,Color.Lime);
}
}
canvas.MakeTransparent(Color.Lime);
// return the picture
return canvas;
}
解決
画像の使用方法または表示方法によって異なります。 PNGとGifは、透明度をサポートする2つのファイル形式です。
透明度のビットマップ設定には、次を使用しました:
Graphics.FromImage(bitmap).FillRectangle(Brushes.Transparent、...)で透明にしたい領域を設定し、ファイルをPNGとして保存して透明な画像を取得します。
MakeTransparentメソッドも試してみましたが、問題が発生し、Brushes.Transparentが私の状況に合った解決策でした。
これにより、検討する方向性が与えられます。
最後の注意点として、幅と高さのみでビットマップオブジェクトを作成します。ピクセル形式や、ビットマップ= New Bitmap(width、height);と呼ばれるものは指定しません。
他のヒント
[...]Format16bppRgb555
ここでは、アルファチャネル(... Rgba)を含む何らかの形式を使用してみてください。また、出力が後で画像になる場合は、アルファチャネルをサポートするPNGなどの画像形式を使用してください。
おそらく、画像形式をFormat16bppArgb1555に変更する必要があります。
今、Format32bppArgbまたはFormat16bppRgb555を使用しています。これは、アルファ情報のないピクセルあたり16ビットです。透明性を確保するには、アルファチャネルまたはアルファビットが必要です。
SetPixel()を Color.Transparent ? Color.Limeの代わりに MakeTransparent
?そして、他の人が指摘したように。アルファチャネルを備えたピクセル形式が必要です。
MakeTransparent関数は機能します。 「灰色のパッチ」があります。 TransparencyKeyが正しくないためです。 TransparencyKeyプロパティをグレーパッチの色に設定すると、画像が表示されるときにグレーパッチが実際に透明になることがわかります。私が手に入れたデフォルトのグレーのパッチには、「Control」というラベルが付いていました。色、または基本的にWindowsフォームのデフォルトの背景色。 TransparencyKeyをグレーのパッチ(私の場合はControl)に変更すると、ハードドライブにファイルを保存せずに問題が解決します。乾杯。