我在网上看到的每个地方,都有人张贴关于如何成功裁剪图像的信息。但是,我想“修剪” /清除图像上的孔。我想保留原始图像,但裁剪出一个矩形
正如您在上图中所看到的,我已经“修剪”出小猫的脸。我维护了原始图像,但只删除了一部分。我不知道该怎么做。
答案 0 :(得分:3)
假设您想用透明度替换原始像素颜色,您会遇到一个小问题:您在GDI +中无法绘制或填充透明度。
但是您可以使用logcat
。
要执行此操作,您限制 Graphics.Clear(Color.Transparent)
对象将绘制的区域。在这里,我们可以使用简单的裁剪矩形,但是您可以使用Graphics
清除更复杂的形状。
使用位图GraphicsPath
的示例:
bmp
答案 1 :(得分:1)
将Graphics
对象的CompositingMode
属性设置为CompositingMode.SourceCopy
将允许您的绘图操作替换alpha值,而不是按比例将其不透明:
public static void TestDrawTransparent()
{
//This code will, successfully, draw something transparent overwriting an opaque area.
//More precisely, it creates a 100*100 fully-opaque red square with a 50*50 semi-transparent center.
using(Bitmap bmp = new Bitmap(100, 100, PixelFormat.Format32bppArgb))
{
using(Graphics g = Graphics.FromImage(bmp))
using(Brush opaqueRedBrush = new SolidBrush(Color.FromArgb(255, 255, 0, 0)))
using(Brush semiRedBrush = new SolidBrush(Color.FromArgb(128, 255, 0, 0)))
{
g.Clear(Color.Transparent);
Rectangle bigRect = new Rectangle(0, 0, 100, 100);
Rectangle smallRect = new Rectangle(25, 25, 50, 50);
g.CompositingMode = System.Drawing.Drawing2D.CompositingMode.SourceCopy;
g.FillRectangle(opaqueRedBrush, bigRect);
g.FillRectangle(semiRedBrush, smallRect);
}
bmp.Save(@"C:\FilePath\TestDrawTransparent.png", ImageFormat.Png);
}
}
在此代码中,我首先绘制一个完全不透明的红色正方形,然后在其上方绘制一个半透明的红色正方形。结果是在正方形中出现一个半透明的“孔”:
零不透明度画笔也可以正常工作,在图像上留下一个清晰的孔(我检查过)。 考虑到这一点,只需用零不透明度画笔填充形状,便可以裁剪出所需的形状。