2

中央に 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;
}
4

5 に答える 5

3
[...]Format16bppRgb555

ここでは、アルファ チャネル (...Rgba) のある形式を使用してみてください。また、後で出力が画像になる場合は、アルファ チャネルをサポートする PNG などの画像形式を使用してください。

于 2009-03-13T20:38:13.497 に答える
2

画像をどのように使用または表示するかによって異なります。PNG と Gif は、透明度をサポートする 2 つのファイル形式です。

透明度のビットマップ設定には、次を使用しました。

Graphics.FromImage(bitmap).FillRectangle(Brushes.Transparent, ...) を使用して、必要な領域を透明に設定し、ファイルを PNG として保存して、透明な画像を取得しました。

MakeTransparent メソッドも試してみましたが、問題が発生しました。Brushes.Transparent が私の状況に適した解決策でした。

これがあなたに調べる方向性を与えることを願っています。

最後に、幅と高さのみを指定して Bitmap オブジェクトを作成します。ピクセル形式やいわゆる bitmap = New Bitmap(width, height); は指定しません。

于 2009-03-13T20:38:24.260 に答える
1

おそらく、画像形式を Format16bppArgb1555 に変更する必要があります。

現在、アルファ情報なしでピクセルあたり 16 ビットの Format32bppArgb または Format16bppRgb555 を使用しています。透明度には、アルファ チャネルまたはアルファ ビットが存在する必要があります。

于 2009-03-13T20:38:14.933 に答える
0

MakeTransparent 関数は機能します。TransparencyKey が正しくないため、「灰色のパッチ」があります。TransparencyKey プロパティを灰色のパッチの色に設定すると、画像が表示されるときに灰色のパッチが実際に透明になることがわかります。私が入手したデフォルトの灰色のパッチは、色で「コントロール」、または基本的にデフォルトの Windows フォームの背景色としてラベル付けされていました。TransparencyKey を灰色のパッチ (私の場合は Control) に変更すると、問題が解決され、ファイルをハード ドライブに保存する必要がなくなります。歓声メイト。

于 2009-04-08T00:26:04.887 に答える
0

Color.TransparentだけじゃないSetPixel()の?Color.Limeの代わりに?そして、他の人が指摘したように; アルファチャンネルのあるピクセル形式が必要です。MakeTransparent

于 2009-03-14T00:59:29.640 に答える