【问题标题】:HTML5 canvas how to change putImageData scaleHTML5画布如何改变putImageData比例
【发布时间】:2014-06-26 11:53:43
【问题描述】:

如何在 scale(1.5, 1.5) 不起作用的情况下更改 putImageData 比例..

var imageData = context.getImageData(0, 0, canvas.width, canvas.height);
context.clearRect(0, 0, canvas.width, canvas.height);
context.scale(1.5, 1.5);
context.putImageData(imageData, 0, 0);

【问题讨论】:

    标签: html5-canvas scale putimagedata


    【解决方案1】:

    正确,您的代码不会缩放现有图纸。

    context.scale 仅影响新图纸,不影响现有图纸。

    context.putImageData 会将保存的原始像素放回画布上,但 putImageData 不是绘图命令,因此其结果不会被缩放。

    要缩放现有像素,您必须将像素保存到画布外部的实体中。外部实体可以是新的 Image 元素或第二个 Canvas 元素。

    示例代码和演示:http://jsfiddle.net/m1erickson/p5nEE/

    // canvas related variables
    var canvas=document.getElementById("canvas");
    var context=canvas.getContext("2d");
    
    // draw a test square
    context.fillStyle="red";
    context.fillRect(0,0,50,50);
    
    // create an image from the canvas
    // clear & scale the canvas
    // draw the image to the canvas
    var imageObject=new Image();
    imageObject.onload=function(){
    
        context.clearRect(0,0,canvas.width,canvas.height);
        context.scale(1.2,1.2);
        context.drawImage(imageObject,0,0);
      
    }
    imageObject.src=canvas.toDataURL();
    

    【讨论】:

    • 我对这种情况有同样的问题:当从第二个画布创建新图像时,第二个画布的某个像素的 alpha = 0。 alpha 消失了,因此对于 alpha = 0 的像素,它变为黑色;如何解决这个问题?
    • 等等,putImage 的参数 6 和 7 不能用于放大图像吗?如果不是,我不明白documentation 说他们实际上做了什么。
    • @Michael 你可能对ctx.drawImage() 感到困惑,他的最后两个参数确实会缩放结果。这个答案框架它的方式是一个很好的心理模型:像 drawImage 这样的绘图命令会尊重比例,而放置命令则不会。
    • 假设我有一个像素数组,它使用 putImageData 显示在画布上,那么仅出于缩放目的,我需要创建一个新的 imageObject?这不是多余的吗?我们使用 putImageData 进行绘制并再次重绘。有没有一种有效的方法?
    • 这很聪明。也让人觉得做作很痛苦。叹息。
    猜你喜欢
    • 1970-01-01
    • 2011-08-21
    • 2011-07-09
    • 2012-10-13
    • 2011-08-06
    • 2014-10-11
    • 1970-01-01
    • 2013-03-11
    • 2018-01-21
    相关资源
    最近更新 更多