所以我试图让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;
}
答案 0 :(得分:1)
所有透明度都将通过Bitmap
类的功能完成。 Graphics
类面向绘图,绘图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);
答案 1 :(得分:0)
当我在寻找相同的解决方案时,我无法找到确切的答案,所以经过一些实验后我遇到了SetCompositingMode
并且它成功了(请参考Using Compositing Mode to Control Alpha Blending完整详情)。
以下是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);
}