Sky_Tsumugi 2023-03-01 18:21 采纳率: 73.3%
浏览 41

canvas drawImage 连续调用绘制图片重影

需求

用canvas实现图片裁剪功能

思路

用两个canvas,一个用来绘制图片,一个用来绘制裁剪框,实现裁剪功能,在移动裁剪框的时候,执行drawImage,给裁剪框画入对应位置的图片数据, 因为存在水印等其他功能,裁剪框现在只能使用canvas实现

问题

移动鼠标事件触发,drawImage事件执行,但画入的图片却糊了,并且在执行一定次数后,就不再画图了,如下图

img

请问问题产生的原因,和解决方案!

  • 写回答

1条回答 默认 最新

  • 全能技术 2023-03-11 14:53
    关注

    这种情况一般是由于 canvas 的绘制机制导致的。canvas 绘制时默认采用 2D 渲染上下文,每次调用 drawImage 方法时,都会在画布上绘制一次图像,而不是替换原来的图像。如果连续绘制同一图像,则会产生重影。

    为了避免这种情况,可以在每次绘制前清空画布。可以使用 clearRect() 方法清除指定矩形内的像素,从而实现清空画布的效果。例如:

    ctx.clearRect(0, 0, canvas.width, canvas.height);
    ctx.drawImage(image, x, y, width, height, 0, 0, canvas.width, canvas.height);
    
    

    在绘制图片前,先清除画布,然后再绘制新的图像。这样就能避免连续绘制同一图像产生的重影问题。

    评论

报告相同问题?

问题事件

  • 已采纳回答 3月2日
  • 创建了问题 3月1日

悬赏问题

  • ¥15 python运行报错 ModuleNotFoundError: No module named 'torch'
  • ¥100 华为手机私有App后台保活
  • ¥15 sqlserver中加密的密码字段查询问题
  • ¥20 有谁能看看我coe文件到底哪儿有问题吗?
  • ¥20 我的这个coe文件到底哪儿出问题了
  • ¥15 matlab使用自定义函数时一直报错输入参数过多
  • ¥15 设计一个温度闭环控制系统
  • ¥100 rtmpose姿态评估
  • ¥15 通联支付网上收银统一下单接口
  • ¥15 angular有偿编写,