【问题标题】:Shouldn't this code make the whole picture black?这段代码不应该使整个画面变黑吗?
【发布时间】:2017-06-04 05:10:09
【问题描述】:

在 p5.js 中,我正在尝试为个人项目处理图像的每个像素,所以我认为我会开始缓慢并尝试使每个像素变黑。由于某种原因,屏幕只是保持白色,我不知道为什么像素没有更新。代码如下:

var Canvas;
var srcImg;
var defaultImg = "http://i.imgur.com/ARg0OOy.jpg";

function preload() {
srcImg = loadImage(defaultImg);
}

function setup () {
  createCanvas(srcImg.width,srcImg.height);
  noLoop();
}

function draw() {
  srcImg.loadPixels();
  for (var x = 0; x < srcImg.width; x++) {
    for (var y = 0; y < srcImg.height; y++) {
      var loc = x + y*srcImg.width;
      srcImg.pixels[loc] = color(224,29,29);
    }
  }
  console.log(loc);
  console.log(srcImg.width);
  console.log(srcImg.height);
  console.log(srcImg.width * srcImg.height);
  srcImg.updatePixels();
  //image(srcImg, 0,0,srcImg.width, srcImg.height);
}

另外,如果我取消对最后一行的注释,我会看到原始图片并且它在顶部被截断(并且它并没有将每个像素都变成黑色)。您可以亲自查看here. 对为什么会发生这种情况有任何想法吗?

编辑:我什至尝试将一行像素设置为鲜艳的红色,而我得到白色屏幕的原因是因为无论我将像素设置为什么颜色,它们都会变成白色......另外,当我试着让整行变成红色,它停在大约 1/4 处,如图所示here(仍然是白色)。我不知道为什么会这样。

【问题讨论】:

    标签: javascript image image-processing p5.js


    【解决方案1】:

    您正在使所有像素变黑,但随后您在这些黑色像素之上绘制srcImage。所以你看到的只有srcImage

    尝试注释掉image(srcImg, 0,0,srcImg.width, srcImg.height); 行以查看黑色像素。

    【讨论】:

    • 嗯,但是updatePixels()不会覆盖原来的srcImg,让它变黑吗?无论哪种方式,我都尝试将其注释掉,现在屏幕上什么也没有出现。
    • @AlexHutman 为什么updatePixels() 会覆盖原来的srcImage?没有什么是应该出现在屏幕上的——你只是在绘制黑色像素。
    • 哦,我的错。我在想updatePixels() 会改变图像的像素,而不是画布。另外,当我说屏幕上什么都没有出现时,我的意思是我的屏幕是全白的。没有黑色。
    • @AlexHutman 如果你想更新图像的像素,你会想要srcImage.loadPixels() 等等。就目前而言,您的代码正在更新屏幕上的像素。如果您没有看到黑色像素,那么我建议您进行调试以准确查看您正在更新的像素位置。
    • 我刚刚尝试将loadPixels() 更改为srcImg.loadPixels()pixels[loc] 更改为srcImg.pixels[loc],并将updatePixels() 更改为srcImg.updatePixels()。我还记录了 loc 的值,它对应于我的图像尺寸的乘积(当然是减 1)。出于某种原因,我仍然只是看到一个白屏。我应该尝试处理 3.3 吗?我现在在 3.3.4 上。如果这令人沮丧,我深表歉意,这是我第一次使用 Javascript 或网站做任何事情,所以我正在慢慢学习。
    猜你喜欢
    • 2023-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-20
    • 2016-05-27
    • 2020-08-07
    • 2018-05-02
    相关资源
    最近更新 更多