javascript - loadPixels() 不适用于 p5.js

标签 javascript canvas processing p5.js

我想使用 p5.js 编辑图像(或只是 Canvas )的像素,它显示在他们网站的文档中:

var img;
function preload() {
  img = loadImage("assets/rockies.jpg");
}

function setup() {
  image(img, 0, 0);
  var d = pixelDensity();
  var halfImage = 4 * (img.width * d) *
      (img.height/2 * d);
  loadPixels();
  for (var i = 0; i < halfImage; i++) {
    pixels[i+halfImage] = pixels[i];
  }
  updatePixels();
}

所以我在 codepen 中尝试了该代码,并正确链接了 p5.js,但它不起作用(当然是用我自己的图像)。

我在Processing IDE本身中制作了一个版本并且它可以工作,所以我尝试将它转换为JS,但我不明白为什么它不工作?

var img;

function setup() {
  createCanvas(500, 400);
  img = loadImage("https://s3-us-west-2.amazonaws.com/s.cdpn.io/379903/image.png");  // Load the image

}

function draw() {
  background(255);

  image(img, 0, 0, 500, 400);



  loadPixels();

  for (var i = 0; i < pixels.length; i++) {
        pixels[i] = color(255, i, 0);
  }

  updatePixels();
}

我只想能够编辑 Canvas 的像素,但它不允许我。

Here是我正在使用的codepen。

图像加载正常,但我无法编辑像素?

我正在关注 Daniel Shiffman 的 tutorials在 YouTube 上。

感谢任何帮助,谢谢。

最佳答案

图像加载需要几秒钟。 setup() 函数和第一次调用 draw() 函数在几毫秒内完成。 当您尝试绘制图像时,图像尚未加载完毕。这就是您得到空白 Canvas 的原因。

为了解决这个问题,p5.js 提供了 preload()功能:

Called directly before setup(), the preload() function is used to handle asynchronous loading of external files. If a preload function is defined, setup() will wait until any load calls within have finished. Nothing besides load calls should be inside preload (loadImage, loadJSON, loadFont, loadStrings, etc).

preload() 中加载图像,而不是在 setup() 函数中:

var img;

function preload(){
  img = loadImage("https://graph.facebook.com/100001230751686/picture?type=large");  
}

function setup() {
  createCanvas(500, 400);
  noLoop();
}

function draw(){
  image(img, 0, 0, 500, 400);
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/p5.js/0.5.0/p5.js"></script>

我不太确定你想用像素做什么,因为你的代码的其余部分没有多大意义。考虑一下您的 i 变量是什么以及 color(255, i, 0) 应该返回什么。但希望该代码只是一个占位符,您现在可以继续加载图像了。

您可能想阅读 pixels[]大批。下面是一个显示图像的示例,但每个像素强度减半:

var img;
    
function preload(){
  img = loadImage("https://graph.facebook.com/100001230751686/picture?type=large");  
}

function setup() {
  createCanvas(500, 400);
  noLoop();
}

function draw() {
  background(0);
  image(img, 0, 0, 500, 400);
  loadPixels();

  for (var i = 0; i < pixels.length; i++) {
    pixels[i] = pixels[i]/2;
  }
  updatePixels();
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/p5.js/0.5.0/p5.js"></script>

Here is a CodePen如果你想尝试一下上面的内容。

关于javascript - loadPixels() 不适用于 p5.js,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36590557/

相关文章:

javascript - 如何在 Javascript 中克隆一个正方形

javascript - 使用 chart.js、javascript、html 实时流式传输数据

JavaScript 噪声函数问题

java - 在处理中实例化变量异常

processing - "Processing"编程语言用于什么?

Javascript 验证表单检查文本区域长度

javascript - 如何让 Featherlight Image Gallery 发挥作用?

javascript - 在html5 Canvas 中绘制另一个图像下的图像

html - 新的 HTML5 Canvas API 支持

java - 在处理中获取一条线沿圆的切线移动