C#,防止擦除笔划擦除重叠背景图像的部分

时间:2017-08-30 08:55:28

标签: c# image graphics background

我正在使用C#控制台应用程序项目来生成栅格帧然后使用         ffmpeg工具从这些帧生成视频。我正在使用图形对象g来绘制bmp对象并将其保存到     生成         框架[保存率为每秒25帧]。我在图形对象上实现了绘图[书写]很好,擦除         "在白色背景",清理图形对象,         完美地撤消绘制的形状。 4)我试图设置背景和         导入图像,并且工作得非常好,因为你可以在上面写         图形对象[无论是白皮书,背景图像,导入         图像...等]

当我试图擦除具有背景的图像部分时的问题[背景图像,例如线条,         图形,坐标..等等。图形对象擦除了         图像的一部分,其中擦除的笔划[白色         重叠。当然这[用于擦除笔划的白色]正在工作         白页背景很好。

我有点大声思考,从逻辑上说,白色笔划橡皮擦会在非白色上标记,这是完全合理的

背景[所以看起来橡皮擦擦除了背景]。

是否有(a)方式,机制,叠加算法,着色机制:)使显示在删除笔画下的背景图像部分'原点,没有扭曲。例如,: 1)将背景图像放在第一层上 2)在顶层执行绘图 3)当擦除[在顶层]时,使用透明色或笔画机制来显示背景图像部分'之前与背景重叠......这可能吗?

感谢您的帮助和提前输入。 请注意,您可能没有完美的解决方案。但是你的想法很受赞赏。

1 个答案:

答案 0 :(得分:0)

分辨率: 屏蔽原始图像(包含我所有形状的源图像'绘图)并将其绘制在不同的目标bmp上:

      public static Image CropToPath(Image srcImage, List<Point> Points, Pen p, Bitmap bmp)  
    {


        Bitmap mask = bmp;//new Bitmap(Bitmap.FromFile( (new DirectoryInfo(outPutPath)).GetFiles()?.OrderByDescending( f => f.CreationTimeUtc).First()?.FullName));

        DrawPoints(Graphics.FromImage(mask), p, Points);


        using (var imgattr = new ImageAttributes())
        {
            // set color key to Line 
            imgattr.SetColorKey(Color.Gainsboro, Color.Gainsboro);

            // Draw non-line portions of mask onto original
            using (var g3 = Graphics.FromImage(srcImage))
            {
                SmoothGraphic(g3).DrawImage(
                    mask,
                    new Rectangle(0, 0, srcImage.Width, srcImage.Height),
                    0, 0, srcImage.Width, srcImage.Height,
                    GraphicsUnit.Pixel, imgattr
                );

                return srcImage;
            }



        }


    }