C#Image Edge Feathering

时间:2010-10-30 00:07:57

标签: c# gdi+ image-manipulation

免责声明:此代码非常糟糕,不应在生产中使用。它正在测试概念验证。

我想使用C#创建如下图像,关键点是羽毛边缘和整个图像的透明度。

alt text

到目前为止,这是我的结果

alt text

正如您所看到的,边缘是羽毛状的。我的问题是,有没有人知道如何使用纯C#来削减边缘并保持透明度,目前我正在使用第三方库以及一些非常讨厌的代码?

如果有一个更好的方法来完成这个句号,那将会感兴趣。

以下是我一直在使用的一些代码。

Bitmap bitmap = new Bitmap(width, height);
Graphics graphics = Graphics.FromImage(bitmap);
// Transparent Background
SolidBrush semiTransparentPen = new SolidBrush(Color.FromArgb(60, 31, 31, 31));
graphics.FillRectangle(semiTransparentPen, 0f, 0f, bitmap.Width, bitmap.Height);

// Feather edges
Bitmap bitmap1 = new Bitmap(bitmap);
Bitmap bitmap2 = new Bitmap(bitmap);

fipbmp.makeEdgesTransparentHorzSigma(bitmap1, 4, 4);
fipbmp.makeEdgesTransparentVertSigma(bitmap2, 4, 4);
fipbmp.MergeBmp(bitmap, bitmap1, bitmap2);

MemoryStream memoryStream = new MemoryStream();
bitmap.Save(memoryStream, ImageFormat.Png);

byte[] buffer = memoryStream.ToArray();

1 个答案:

答案 0 :(得分:0)

您可能会发现我曾撰写的这篇博文有用:Soft Edged Images in GDI+。这将向您展示您需要了解的很多内容。为了在任意形状上创建平滑边缘,您还需要一个平滑滤镜(您需要将其应用于Alpha通道),您可以阅读here