【问题标题】:c# Set transparency to area defined by polygonc# 为多边形定义的区域设置透明度
【发布时间】:2015-01-15 21:58:16
【问题描述】:

我有一个位图,我想将透明度应用于由多边形定义的特定区域。那不是问题。我目前面临的问题是如何将透明度应用于多边形的反转区域。我试过使用 Bitmap.SetPixel() 但这太慢了。这是我当前适用于法线多边形的方法:

public Bitmap Mask(Bitmap b, Point[] mask, bool invert)
    {
        Bitmap ret = new Bitmap(width, height, PixelFormat.Format32bppArgb);
        Graphics g = Graphics.FromImage(ret);
        g.Clear(Color.FromArgb(255,255,255,255));
        g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;

        g.DrawImage(b, 0, 0, width, height);
        g.CompositingMode = System.Drawing.Drawing2D.CompositingMode.SourceCopy;
        g.FillPolygon(new SolidBrush(Color.Transparent), mask);

        return ret;
    }

【问题讨论】:

  • 您是否尝试过解决如何将透明度应用于多边形的倒置区域选择的问题?如果你有,请告诉我们你尝试了什么,以及为什么你被卡住了。仅仅要求某人为您完全弄清楚某事表明您付出的努力很少,并且不太可能得到回应。

标签: c# graphics bitmap transparency polygon


【解决方案1】:

我找到了解决办法。

我使用TextureBrushBitmap b as a texture 并在透明背景上绘制多边形,最终创建倒置多边形效果。

Bitmap ret = new Bitmap(width, height, PixelFormat.Format32bppArgb);
Graphics g = Graphics.FromImage(ret);
g.Clear(Color.FromArgb(0,255,255,255));
g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;

if (!invert)
{
    g.DrawImage(b, 0, 0, width, height);
    g.CompositingMode = System.Drawing.Drawing2D.CompositingMode.SourceCopy;
    g.FillPolygon(new SolidBrush(Color.Transparent), mask);
}
else g.FillPolygon(new TextureBrush(b), mask);
return ret;

【讨论】:

  • 你能解释一下你做了什么吗?就目前而言,您的问题和答案都缺乏对社区有价值的足够解释(通常这意味着问题最终被关闭)。
  • @Verdolino 我使用TextureBrush 和Bitmap b 作为纹理并在透明背景上绘制多边形,最终创建倒置多边形效果。除此之外,我没有添加/更改任何内容。
  • 好的,我已将其添加到您的答案中。将来,您可以编辑自己的答案并自己添加解释。为您 +1,欢迎来到 SO!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-21
  • 1970-01-01
  • 1970-01-01
  • 2012-12-28
  • 2012-12-15
相关资源
最近更新 更多