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

问题描述:

我正在使用C#控制台应用程序项目生成光栅帧,然后使用 ffmpeg工具从这些帧生成视频。我正在使用一个图形对象g来绘制一个bmp对象并将其保存到 生成 的帧(s)[保存速率是每秒25帧]。我在图形对象上执行了绘图[写入],擦除 “在白色背景上”,很好地清除了图形对象, 完美地取消了绘制的形状。 4)我尝试设置背景和 导入图像,并且工作得非常好,你可以在 图形对象上写[是否白纸,背景图像,进口 图像...等]C#,防止擦除重叠背景图像部分的笔画

的问题,当我试图擦除具有背景的图像部分[背景图像,例如线条,图形,坐标..等]。该图形对象将擦除擦除笔划[白色 重叠]的图像部分 。当然这[用于擦除笔画的白色]正在工作 罚款与白色页面背景。

我有种想大声,逻辑上的它非常有意义的是,白色的行程橡皮擦将在非白色

背景标记[所以看起来橡皮擦擦除背景。

是否存在(a)方式,机制,覆盖算法,着色机制:)使得在擦除笔划'点下的背景图像部分不变形。例如: 1)将背景图像放置在第一层 2)在顶层执行绘图 3)当[在顶层上]擦除时,使用透明颜色或笔触机制来显示背景图像“部分”之前与背景重叠......这可能吗?

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

分辨率: 掩蔽原始图像(用我所有的形状的图纸源图像),并绘制它在不同的目的地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; 
      } 



     } 


    }