【问题标题】:Problems sampling color from image-pixel drawn on off-screen canvas从屏幕外画布上绘制的图像像素中采样颜色的问题
【发布时间】:2011-11-15 23:22:29
【问题描述】:

我需要从图像中采样像素颜色,但似乎我无法正确处理。我加载图像并将其绘制到屏幕外画布上,然后尝试对像素颜色进行采样,但我总是得到 0 值。

我的代码:

// Create canvas and set context
var canvas = document.createElement('canvas');
canvas.width = 8;
canvas.width = 8;
var context = canvas.getContext('2d');

// Setup image
var image = new Image();
image.src = 'img.png';
image.onload = function(){
    context.drawImage(image, 0, 0);
}

// Sample a random pixel from the canvas
var x = Math.floor(Math.random()*8);
var y = Math.floor(Math.random()*8);
var pixelInfo = context.getImageData(x,y,1,1);
var rgbaVal = pixelInfo.data;
alert('Image: '+image.src+'\n\nR: '+rgbaVal[0]+'\nG: '+rgbaVal[1]+'\nB: '+rgbaVal[2]+'\nA: '+rgbaVal[3]+'\n\nCoords: '+x+', '+y);

我没有收到任何错误,如果我尝试在屏幕画布上绘制图像,图像会正确绘制。我找不到问题

【问题讨论】:

    标签: javascript image html canvas sample


    【解决方案1】:

    <canvas id="canvas1" width="200", height="200" style="background:red;">Random Canvas</canvas>
    <script>
    
        var canvas = document.getElementById("canvas1");
        //canvas.width = 200;
        //canvas.width = 200;
        var context = canvas.getContext('2d');
    
        // Setup image
        var image = new Image();
        image.src = "img/image.jpg";
    
        image.onload = function()
        {
    
           context.drawImage(image, 0, 0);
    
           var x = Math.floor(Math.random()*200);
           var y = Math.floor(Math.random()*200);
           var pixelInfo = context.getImageData(x,y,1,1);
           var rgbaVal = pixelInfo.data;
    
           alert('Image: '+image.src+'\n\nR: '+rgbaVal[0]+'\nG: '+rgbaVal[1]+'\nB: '+rgbaVal[2]+'\nA: '+rgbaVal[3]+'\n\nCoords: '+x+', '+y);
    
        }
    
        // Sample a random pixel from the canvas
    
    </script>
    

    【讨论】:

      【解决方案2】:

      因为图像尚未加载和绘制。你在 onload 触发后绘制它,那么你也应该得到 RGB 值。

      image.onload 函数将在您的采样函数之后触发,因此您此时只需对一个空画布进行采样。

      【讨论】:

      • 但即使我删除 .onload 并将图像 (context.drawImage(image, 0, 0);) 绘制到画布上,我仍然得到相同的结果。有些东西告诉我,我并没有以正确的方式将图像绘制到画布上?
      • 不要移除onload,取而代之的是onload中的像素颜色。
      • 好吧,这行得通,但仅限于不在本地运行代码的情况下。是否有任何解决方法(不涉及在启动时设置浏览器参数等)?
      • 如果你安装了 python,cd 到你的文件所在的目录并输入 - python -m SimpleHTTPServer 几周前我遇到了和你完全相同的问题,这是我采取的方法.
      猜你喜欢
      • 2012-12-19
      • 2023-03-11
      • 2021-09-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-13
      相关资源
      最近更新 更多