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;
}
}
}