wpf inkcanvas 笔划按像素擦除
wpf inkcanvas stroke erase by pixel
我正在wpf中使用inkcanvs开发绘图工具控件。
当我绘制矩形时,这是原始图像。
Original Image
而且我设置的编辑模式是逐点擦除。当我擦除矩形时,这是工作后的图像。
Erased Image
我希望擦除功能与 windows 中的默认绘图工具一样有效。它将按像素工作。按像素擦除形状。
部分源代码
public class Label : Stroke
{
protected override void DrawCore(DrawingContext drawingContext, DrawingAttributes drawingAttributes)
Rect rect = new Rect((Point)this.StylusPoints[0], (Point)this.StylusPoints[1]);
drawingContext.DrawRectangle(...)
标准 API 无法做到这一点。
只有将墨迹图像(笔画,增强矢量)转换为位图图像(包含像素),才能对单个像素进行操作,但笔画信息将丢失。
通过相当多的努力,可以创建一个应用程序来跟踪其所有用户的操作(绘制一些笔画、添加一个像素、删除一个像素)并在每次 UI 需要重绘时重播它们, 在需要的地方注入从矢量到位图的转换。
这是一个不错的练习,但可能会太慢 and/or 复杂。
我正在wpf中使用inkcanvs开发绘图工具控件。 当我绘制矩形时,这是原始图像。
Original Image
而且我设置的编辑模式是逐点擦除。当我擦除矩形时,这是工作后的图像。
Erased Image
我希望擦除功能与 windows 中的默认绘图工具一样有效。它将按像素工作。按像素擦除形状。
部分源代码
public class Label : Stroke
{
protected override void DrawCore(DrawingContext drawingContext, DrawingAttributes drawingAttributes)
Rect rect = new Rect((Point)this.StylusPoints[0], (Point)this.StylusPoints[1]);
drawingContext.DrawRectangle(...)
标准 API 无法做到这一点。
只有将墨迹图像(笔画,增强矢量)转换为位图图像(包含像素),才能对单个像素进行操作,但笔画信息将丢失。
通过相当多的努力,可以创建一个应用程序来跟踪其所有用户的操作(绘制一些笔画、添加一个像素、删除一个像素)并在每次 UI 需要重绘时重播它们, 在需要的地方注入从矢量到位图的转换。
这是一个不错的练习,但可能会太慢 and/or 复杂。