-3

有谁知道我为什么会收到这个错误?本质上,该程序显示图像,显示直方图或图像。然后它调整每个像素的亮度,并再次显示具有调整值的图像和直方图。

错误是:

The method drawHistogram(int[], int, int) is not applicable for arguments (PImage, int[]);

PImage rocks;
PImage rocksBrightened;
PImage rocks2;
int rockBytes[][];
int rockBrights[][];

void setup() {  

  rocks = loadImage("rocks.png");
  size(rocks.width+256, rocks.height*2);
  rocks2 = createGraphics(rocks.width, rocks.height, P2D);
  rocks2.loadPixels();

  int h = rocks.height;
  size(rocks.width*2, rocks.height*2);
  image(rocks, 0, 0);
  rockBytes = new int[rocks.width][rocks.height];
  rockBrights = new int[rocks.width][rocks.height];
  for (int i = 0;i < rocks.width; i++) {  
    for (int j = 0; j < rocks.height; j++) {
    rockBytes[i][j] = rocks.get(i, j);
    } 
  }  
  for (int i = 0; i < rocks.width; i++) { 
    for (int j = 0; j < rocks.height; j++) { 
      rockBrights[i][j] = rocksBrightened.get(i, j); 
      }  
    } 
  drawHistogram(rocks, computeHistogram(rocks)); //THIS LINE CAUSES ERROR
  brighten(rockBrights);
  // makeImage(rocksBrightened, rockBrights);
  image(rocksBrightened, 0, h);
  }

void loadPixelArray(PImage anImage) { 
  anImage.loadPixels(); //load pixels into pixels[] array
  }

int[] computeHistogram (PImage anImage) {
  int histogram[] = new int[256];
  for (int i = anImage.pixels.length-1; i >= 0; --i) {
    int v = (int) brightness(anImage.pixels[i]);
    histogram[v]++;
  }
  int maxV = 0;
  for (int i = 0; i < 256; i++) {
    maxV = max(maxV,histogram[i]);
  }
  for (int i = 0; i < 256; i++) {
    histogram[i] = (int) (histogram[i]*100.0/maxV);
  }
  return histogram; 
}


void brighten(int anyArray[][]) { 

   for (int i = rocks.pixels.length-1; i >= 0; --i) {
      int v = rocks.pixels[i];
      float br = brightness(v);
      float r = constrain(br*-.004436+2.1308*red(v),0,255);
      float g = constrain(br*-.004436+2.1308*green(v),0,255);
      float b = constrain(br*-.004436+2.1308*blue(v),0,255);
      rocks2.pixels[i] = color(r,g,b);
      } 
  }

  void drawHistogram(int histogram[], int x, int y) {
  noStroke();
  fill(0);
  stroke(255);
  rect(x, y, 256, 256);
  for (int i = 0; i < 256; i++) {
    line(x + i, y+256, x + i, y+256 - histogram[i]);
  }
 }


 void makeImage(PImage anImage, int imgArray[][]) { 

   anImage.loadPixels();
   for (int i = 0; i < imgArray.length; i++) {   
     for (int j = 0; j < imgArray[0].length; j++) {   
     int loc = i + j*imgArray.length;   
     set(i, j+100, color(imgArray[i][j])); 
     } 
   }
   anImage.updatePixels();
}
4

2 回答 2

3

好吧,错误消息说明了一切:

方法 drawHistogram(int[], int, int) 不适用于参数 (PImage, int[]);

这意味着您正在尝试调用方法drawHistogram(),该方法被声明为drawHistogram(int[], int, int)(这意味着它需要一个 int 数组和两个 int 作为参数),但是您传递了一个PImage和一个 int 数组而不是所需的参数。那没有意义。

这有点像试图将一美元钞票插入一台只接受硬币的机器:它不起作用。

于 2012-12-01T21:57:13.253 回答
1

正如 JB Nizet 所说。要纠正这个特定的错误,只需使用方法 computeHistogram(),调用:

drawHistogram(computeHistogram(rocks), x, y);

其中 x 和 y 是绘制直方图的基本位置。但在那之后,代码将无法编译。还有一些其他的错误你可以去处理:)

于 2012-12-01T23:38:51.773 回答