将作物从(切成洞)图像反转

时间:2019-02-28 16:19:04

标签: c# image bitmap crop

我在网上看到的每个地方,都有人张贴关于如何成功裁剪图像的信息。但是,我想“修剪” /清除图像上的孔。我想保留原始图像,但裁剪出一个矩形

enter image description here

正如您在上图中所看到的,我已经“修剪”出小猫的脸。我维护了原始图像,但只删除了一部分。我不知道该怎么做。

2 个答案:

答案 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);
            }
        }

在此代码中,我首先绘制一个完全不透明的红色正方形,然后在其上方绘制一个半透明的红色正方形。结果是在正方形中出现一个半透明的“孔”:

Red square with semi-transparent center 在黑色背景上: The square with semi-transparent hole, on a black background

零不透明度画笔也可以正常工作,在图像上留下一个清晰的孔(我检查过)。 考虑到这一点,只需用零不透明度画笔填充形状,便可以裁剪出所需的形状。