1

だから私は32x32ブロックを透明に戻そうとしていますが、それを透明に設定しようとするたびに、すでにそこにあるものを保持します.画像にあるものを透明に消去したい.

    public Bitmap erase_tile(Bitmap bitmap, int x, int y)
    {
        Graphics device = Graphics.FromImage(bitmap);

        Brush brush = new SolidBrush(Color.FromArgb(0, Color.White));

        device.FillRectangle(brush, new Rectangle(x * 32, y * 32, 32, 32));
        return bitmap;
    }
4

2 に答える 2

2

すべての透過性は、Bitmapクラスの機能によって実現されます。このGraphicsクラスはdrawing を対象としており、描画Color.Transparent基本的にノーオペレーションです。

を使用Bitmap.SetPixel()Color.Transparentて、個々のピクセルを設定できます。

または、このようなことを行うことができます。ここではGraphics、ダミーの色をペイントするために使用し、ビットマップに透明な色として使用するように指示します。

using (var graphics = Graphics.FromImage(bmp))
{
    graphics.FillRectangle(Brushes.Red, 0, 0, 64, 64);
    graphics.FillRectangle(Brushes.Magenta, 16, 16, 32, 32);
}
bmp.MakeTransparent(Color.Magenta);
于 2013-06-12T19:32:47.127 に答える
0

私は同じ解決策を探していましたが、正確な答えを見つけることができませんでした。そのため、いくつかの実験の結果、うまくいきましたSetCompositingMode(完全な詳細については、合成モードを使用してアルファ ブレンディングを制御するを参照してください)。

アプローチを示す C++ の作業コードを次に示します (C# で再利用するには、いくつかの調整が必要です)。

void SetTransparent(Gdiplus::Image* image, IN INT x, IN INT y, IN INT width, IN INT height)
{
    Gdiplus::Graphics graph(image);
    graph.SetCompositingMode(Gdiplus::CompositingModeSourceCopy);
    Gdiplus::SolidBrush transparent(0);
    graph.FillRectangle(&transparent, x, y, width, height);
}
于 2017-10-14T01:19:21.030 に答える