Image processing 加工草图赢得';t在屏幕上显示修改后的图像
我正在做一个草图,它有以下功能:Image processing 加工草图赢得';t在屏幕上显示修改后的图像,image-processing,processing,Image Processing,Processing,我正在做一个草图,它有以下功能: 调整大图像的大小,使其适合800 x 600屏幕 显示图像 按下键时应用一些效果 将图像重新显示在屏幕上,并打印一点Done消息 除了不能正确显示图像外,一切正常 以下是黑白效果: void blackAndWhite() { loadPixels(); for (int i = 0;i < img.pixels.length;i++) { int pixel = img.pixels[i]; // println("Workin
800 x 600
屏幕李>
Done
消息void blackAndWhite() {
loadPixels();
for (int i = 0;i < img.pixels.length;i++) {
int pixel = img.pixels[i];
// println("Working on pixel " + i + " out of " + img.pixels.length);
int red = (int) red(pixel);
int green = (int) green(pixel);
int blue = (int) blue(pixel);
/*
* Luminosity Method.
*/
// red = (int) (red * 0.21);
// green = (int) (green * 0.71);
// blue = (int) (blue * 0.07);
/*
* Average Method
*/
// float avg = (int) (red + green + blue / 3);
// red = green = blue = (int) avg;
/*
* Lightness Method
*/
int mostProminent = max(red, green, blue);
int leastProminent = min(red, green, blue);
int avg = (int) ((mostProminent + leastProminent) / 2);
red = green = blue = avg;
pixel = color(red, green, blue);
img.pixels[i] = pixel;
}
println("Done");
updatePixels();
image(img, WIDTH/2, HEIGHT/2, calculatedWidth, calculatedHeight);
}
void blackAndWhite(){
loadPixels();
对于(int i=0;i
但是,仅显示彩色图像:(我知道该算法有效,因为我在其他图像上尝试过(不使用此草图)。
出了什么问题?以下代码工作正常:
PImage img;
void setup () {
img = loadImage ("img.png");
size(img.width, img.height);
}
void draw () {
image(img, 0, 0);
}
void keyReleased () {
blackAndWhite();
}
void blackAndWhite() {
img.loadPixels();
for (int i = 0;i < img.pixels.length;i++) {
int pixel = img.pixels[i];
// println("Working on pixel " + i + " out of " + img.pixels.length);
int red = (int) red(pixel);
int green = (int) green(pixel);
int blue = (int) blue(pixel);
/*
* Luminosity Method.
*/
// red = (int) (red * 0.21);
// green = (int) (green * 0.71);
// blue = (int) (blue * 0.07);
/*
* Average Method
*/
// float avg = (int) (red + green + blue / 3);
// red = green = blue = (int) avg;
/*
* Lightness Method
*/
int mostProminent = max(red, green, blue);
int leastProminent = min(red, green, blue);
int avg = (int) ((mostProminent + leastProminent) / 2);
red = green = blue = avg;
pixel = color(red, green, blue);
img.pixels[i] = pixel;
}
println("Done");
img.updatePixels();
}
PImage-img;
无效设置(){
img=loadImage(“img.png”);
尺寸(最小宽度、最小高度);
}
无效提款(){
图像(img,0,0);
}
无效键已释放(){
黑白();
}
无效黑白(){
img.loadPixels();
对于(int i=0;i
我的猜测是,您要么忘了编写img.loadPixels()而不是loadPixels(),要么是sketch的draw()中出现了错误方法。不确定这是否有区别,但将变量red、green和blue与函数red、green和blue同名是否安全/合理?@Zaphod Yeh。这很好。我在另一个草图中尝试过这个算法,效果很好:)如果我在
设置()
中调用黑白,我会得到一个新图像。只是不是从按下的键开始
仅仅loadPixels()
做什么?函数loadPixels()调用草图窗口的1d像素颜色值数组。草图称为窗口像素,但随后使用点运算符img.someMethod()访问图像像素。基本上,您加载了窗口的像素,但随后编写了修改卸载图像像素的指令。