在鼠标绘图上重新绘制画布并调整其大小

用户1058043

我需要在鼠标绘图上调整画布大小并重新绘制画布。
我做了演示,但这是行不通的,当我调整画布大小时,所有的数据都是干净的

我尝试了不同的选择,例如:

  • 临时帆布
  • toDataURL

但是没有成功

游戏炼金术士

您的小提琴正在工作,我唯一想念的是调整画布的大小确实可以清除它,因此实际上,在您提供的小提琴中,您的鼠标的任何移动都可以清除它。

编辑:好的,我想我了解您的问题。

1)在调整大小时,您松开了内容。
2)调整大小后,您会松开当前路径,因此必须重新启动路径图。
3)如果您在每次鼠标移动时创建一个画布,则内存消耗将达到高峰,并且您的应用程序将不会响应。
4)由于重绘发生在鼠标移动而不是requestAnimationFrame上,因此,如果您只是在鼠标移动进行完整的重绘,则整个过程看起来会很麻烦。

所以我更新了这个小提琴,以便解决所有这些问题:

在这里尝试:http : //jsfiddle.net/gamealchemist/JHr2P/78/

  • 我处理的临时画布在不够大时会使其尺寸加倍(因此它的更改频率要少得多。请使用小于2倍的倍数,或者在认为合适的情况下使用其他缓存策略)。因此,内存使用不会太大。
  • 抚摸线条后,我将图像保存到临时画布。
  • (仅将鼠标移到该图像上可以将图像存储到localContent,以减少开销)。
  • 然后我调整大小+从临时画布重绘。
  • 然后我重新开始画线。
  • 以上所有操作都是在requestAnimationFrame中完成的,以免产生模糊的闪烁。

存储/恢复代码:

var _storeCanvas =  document.createElement('canvas');
var _storeCtx = _storeCanvas.getContext('2d');

function storeInTempCanvas() {
   if (_storeCanvas == null || _storeCanvas.width < canvas.width || _storeCanvas.height )    {   
    _storeCanvas.width = 2 * canvas.width; 
    _storeCanvas.height = 2 * canvas.height;
   }
   _storeCtx.drawImage(canvas, 0, 0);
}

function restorefromTempCanvas() {
    ctx.drawImage(_storeCanvas, 0, 0);
}

更新了鼠标移动代码:

var draw = {
      // ... same mousedwon code...

    mousemove: function(coordinates) {
        if (this.isDrawing) {
            requestAnimationFrame ( function() {
                        ctx.lineTo(coordinates.x, coordinates.y);
                        ctx.stroke();            
                        storeInTempCanvas();
                        canvas.width+=1;
                        restorefromTempCanvas();
                        ctx.beginPath();
                        ctx.moveTo(coordinates.x, coordinates.y);
            } );
       }
    },

 //... same mouseup code.


}  

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在画布上重新绘制以调整大小而不会模糊?

来自分类Dev

调整窗口大小时重新绘制/擦除画布

来自分类Dev

在tkinter中调整画布大小并重新绘制

来自分类Dev

调整窗口大小时重新绘制/擦除画布

来自分类Dev

让用户使用Javascript在画布上用鼠标绘制矩形

来自分类Dev

调整画布大小时,画布绘图会变形

来自分类Dev

调整画布大小时,画布绘图会变形

来自分类Dev

用鼠标绘制SVG

来自分类Dev

CSS/JavaScript:设置画布样式时的问题(用于鼠标绘制)

来自分类Dev

调整大小时重新绘制SVG

来自分类Dev

画布-在窗口调整大小时转换鼠标坐标

来自分类Dev

在OpenGL中用鼠标绘制多条线

来自分类Dev

用鼠标绘制矩形(div)

来自分类Dev

Tkinter:使用鼠标绘制矩形

来自分类Dev

使用plotlyProxyInvoke在绘图图上添加垂直线而无需调整绘图的大小

来自分类Dev

在画布中绘制时如何调整位图的大小?

来自分类Dev

在画布上绘制可调整大小的矩形

来自分类Dev

如何使用 QPainter + QPixmap 实现鼠标绘图?

来自分类Dev

调整画布图像的大小

来自分类Dev

无法调整画布大小

来自分类Dev

如何调整画布大小

来自分类Dev

调整画布图像的大小

来自分类Dev

调整画布元素的大小

来自分类Dev

如何强迫设计师重新绘制调整大小的矩形?

来自分类Dev

强制“ Rallychart”组件在容器调整大小时重新绘制

来自分类Dev

在父容器调整大小时重新绘制Google地图

来自分类Dev

pyQt QWidget'闪烁'调整大小并重新绘制

来自分类Dev

使wxWidgets面板在调整大小时始终重新绘制

来自分类Dev

Highcharts-销毁图例后重新绘制/调整图表大小?

Related 相关文章

热门标签

归档