我正在使用C#控制台应用程序项目来生成栅格帧然后使用 ffmpeg工具从这些帧生成视频。我正在使用图形对象g来绘制bmp对象并将其保存到 生成 框架[保存率为每秒25帧]。我在图形对象上实现了绘图[书写]很好,擦除 "在白色背景",清理图形对象, 完美地撤消绘制的形状。 4)我试图设置背景和 导入图像,并且工作得非常好,因为你可以在上面写 图形对象[无论是白皮书,背景图像,导入 图像...等]
当我试图擦除具有背景的图像部分时的问题[背景图像,例如线条, 图形,坐标..等等。图形对象擦除了 图像的一部分,其中擦除的笔划[白色 重叠。当然这[用于擦除笔划的白色]正在工作 白页背景很好。
我有点大声思考,从逻辑上说,白色笔划橡皮擦会在非白色上标记,这是完全合理的
背景[所以看起来橡皮擦擦除了背景]。
是否有(a)方式,机制,叠加算法,着色机制:)使显示在删除笔画下的背景图像部分'原点,没有扭曲。例如,: 1)将背景图像放在第一层上 2)在顶层执行绘图 3)当擦除[在顶层]时,使用透明色或笔画机制来显示背景图像部分'之前与背景重叠......这可能吗?
感谢您的帮助和提前输入。 请注意,您可能没有完美的解决方案。但是你的想法很受赞赏。
答案 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;
}
}
}