处理草图更新但不绘制
Processing sketch updates but doesn't draw
所以我想写一个处理草图来改变图像的颜色。
但出于某种原因,它总是做一些我什至无法理解的事情。例如,即使我更改了它的颜色,它也不会更新输出的图像。
当我检查时,图像的颜色正在改变,但它在屏幕上并没有改变。
有时它也只会改变图像的某些部分。
非常感谢有人看一看。
谢谢。
这是我的代码:
PImage img;
PImage image;
void setup() {
fullScreen();
img = loadImage("ship.jpg");
image = img;
for (int i = 0; i < img.pixels.length; i++) {
color c = color(img.pixels[i]);
float re = red(c);
float gree = green(c);
float blu = blue(c);
image.pixels[i] = color(re, gree, blu);
}
}
void draw() {
float r = random(255);
float g = random(255);
float b = random(255);
PImage newI = img;
for (int i = 0; i < newI.pixels.length; i++) {
float red = red(image.pixels[i]);
float re = warp(r+red, 0, 255);
float green = green(image.pixels[i]);
float gree = warp(g+green, 0, 255);
float blue = blue(image.pixels[i]);
float blu = warp(b+blue, 0, 255);
newI.pixels[i] = color(re, gree, blu);
}
image(newI, 0, 0);
println(red(newI.pixels[0]) + "-" + green(newI.pixels[0]) + "-" + blue(newI.pixels[0]));
}
float warp(float v, float start, float stop) {
if (v < start) {
float rest = start-v;
v = stop-rest;
v = warp(v, start, stop);
}
if (v > stop) {
float rest = v-stop;
v = start+rest;
v = warp(v, start, stop);
}
return v;
}
我认为您可能需要在修改之前调用 loadPixels()
,在修改之后调用 updatePixels()
。
PImage myImage;
int halfImage;
void setup() {
size(100, 100);
halfImage = width * height/2;
myImage = loadImage("apples.jpg");
myImage.loadPixels();
for (int i = 0; i < halfImage; i++) {
myImage.pixels[i+halfImage] = myImage.pixels[i];
}
myImage.updatePixels();
}
void draw() {
image(myImage, 0, 0);
}
所以我想写一个处理草图来改变图像的颜色。
但出于某种原因,它总是做一些我什至无法理解的事情。例如,即使我更改了它的颜色,它也不会更新输出的图像。
当我检查时,图像的颜色正在改变,但它在屏幕上并没有改变。
有时它也只会改变图像的某些部分。
非常感谢有人看一看。
谢谢。
这是我的代码:
PImage img;
PImage image;
void setup() {
fullScreen();
img = loadImage("ship.jpg");
image = img;
for (int i = 0; i < img.pixels.length; i++) {
color c = color(img.pixels[i]);
float re = red(c);
float gree = green(c);
float blu = blue(c);
image.pixels[i] = color(re, gree, blu);
}
}
void draw() {
float r = random(255);
float g = random(255);
float b = random(255);
PImage newI = img;
for (int i = 0; i < newI.pixels.length; i++) {
float red = red(image.pixels[i]);
float re = warp(r+red, 0, 255);
float green = green(image.pixels[i]);
float gree = warp(g+green, 0, 255);
float blue = blue(image.pixels[i]);
float blu = warp(b+blue, 0, 255);
newI.pixels[i] = color(re, gree, blu);
}
image(newI, 0, 0);
println(red(newI.pixels[0]) + "-" + green(newI.pixels[0]) + "-" + blue(newI.pixels[0]));
}
float warp(float v, float start, float stop) {
if (v < start) {
float rest = start-v;
v = stop-rest;
v = warp(v, start, stop);
}
if (v > stop) {
float rest = v-stop;
v = start+rest;
v = warp(v, start, stop);
}
return v;
}
我认为您可能需要在修改之前调用 loadPixels()
,在修改之后调用 updatePixels()
。
PImage myImage;
int halfImage;
void setup() {
size(100, 100);
halfImage = width * height/2;
myImage = loadImage("apples.jpg");
myImage.loadPixels();
for (int i = 0; i < halfImage; i++) {
myImage.pixels[i+halfImage] = myImage.pixels[i];
}
myImage.updatePixels();
}
void draw() {
image(myImage, 0, 0);
}