我试图将一个半透明的橡皮刷写进我正在开发的应用程序中,但发现了两个问题,这取决于它的实现方式。希望有一个解决办法,我可以指出。
代码示例在mono droid/xamarin中
所以,我通常有一个设置,在画布上绘制路径。我的视图的ondraw
方法绘制它的基本位图,然后在其上绘制我的路径。
// Canvas is set up elsewhere
canvasBitmap = Bitmap.CreateBitmap(w, h, Bitmap.Config.Argb8888);
DrawCanvas.SetBitmap(canvasBitmap);
protected override void OnDraw(Canvas canvas)
{
base.OnDraw(canvas);
// Draw the saved canvas bitmap
canvas.DrawBitmap(canvasBitmap, 0, 0, canvasPaint);
// On top of that draw the current path
canvas.DrawPath(DrawPath, DrawPaint);
}
public bool OnTouch(View view, MotionEvent ev)
{
float touchX = ev.GetX();
float touchY = ev.GetY();
switch (ev.Action)
{
case MotionEventActions.Down:
if (Editable)
{
// I've removed a bunch of code here but it basically
// moves the path start to the touch point and sets
// up the brush to start erasing. It does set the
// porterduff mode to dstOur
DrawPaint.SetMaskFilter(null);
DrawPaint.SetXfermode( new PorterDuffXfermode(PorterDuff.Mode.DstOut));
DrawPath.MoveTo(touchX, touchY);
} else { return false; }
break;
case MotionEventActions.Move:
// Just draws a line to the new touch coordinates
DrawPath.LineTo(touchX, touchY);
break;
case MotionEventActions.Up:
case MotionEventActions.Cancel:
// saves some data about the path and draws to the drawing canvas.
DrawCanvas.DrawPath(DrawPath, DrawPaint);
// Recycle it
DrawPath.Reset();
break;
}
return true;
}
有人有什么东西我可以看一下,可以提出解决方案吗?Java很好,因为它很容易移植到C#。
多谢!奈杰尔
在没有比我更有经验/智慧的人提出建议的情况下,我以以下可怕的方式绕过了它。当我继续寻找更聪明的方法时,它可能仍然对其他人有帮助。
当down
事件发生时,我将位图的干净副本抓取到临时变量中。在每个ondraw
事件中,我读取清除位图,然后在其上绘制擦除路径。
可怕的是,每个ondraw
事件中都有一个位图复制方法,以确保擦除路径不会加倍。
OnDraw( Canvas canvas )
{
tempBitmap.Recycle();
tempBitmap = _drawingBitmap.Copy(_drawingBitmap.GetConfig(), true);
DrawCanvas.DrawColor(Color.Transparent, PorterDuff.Mode.Clear);
DrawCanvas.DrawBitmap(tempBitmap, 0, 0, DrawPaint));
DrawCanvas.DrawPath(DrawPath, DrawPaint);
}
我想使用Fabric.js在我的web应用程序中实现eraser。在Fabric.js中有没有实现橡皮擦的方法?例如,如在MS Paint?
我已经在谷歌上搜索了这个问题,并提出了各种解决方案。 但是,没有一个对我有效。 我在一个应用程序中有一个绘图画布。 画布的背景被设置为活动中的png图像,该活动使用自定义视图(drawView); 在DrawingView类(drawview是实例)中,我将绘制的路径存储在一个PathPaints集合中,该集合有3个属性(路径、使用的油漆以及如果是橡皮擦); 我已经尝试在drawpath上设置油漆
在画布上画画是非常好的。即使橡皮擦也能工作得很好。问题是当画布保存为图像时,它画的是黑线,而不是橡皮擦。 为了更好地理解,我添加了屏幕、镜头和代码。 1.在擦除图的同时- 我不明白为什么橡皮移动被替换为黑色,而保存画布作为一个图像。
这是我的舱单: 而这里是我的活动布局: 在我启动活动后,它停止,这是一个错误:
我已经创建了一个HTML5绘图应用程序,它具有基本功能,允许用户选择一种颜色来绘制,改变绘图工具的大小(半径),撤消,重做,以及完全清除画布。 我最近添加了一个橡皮擦工具,使用globalCompositionProperty(desitnation-out)擦除画布的选定区域。这部分工作良好,但当我去撤销擦除,整个画布被清除,重做功能不起作用。当我用常规的绘图工具(使用source-over)恢
我正在尝试做一些非常简单的事情(见上文)。我希望画布的所有像素都是纯色,除了填充中心圆圈的像素。我已经阅读了数百篇关于这个主题的stack overflow帖子,并尝试了数百种方法,包括设置porterduff.mode。下面是MyView extends视图的当前onDraw(): 我是不是误解了什么,为什么我不能用透明油漆在现有的像素上油漆。当我这样做时,像素保持不变。当我使用PorterDu