0

次のことを行うスケッチを作成しています。

  • 画面に収まるように大きな画像のサイズを変更し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);
    }  
    

    ただし、色付きの画像のみが表示されます:(
    アルゴリズムが機能することはわかっていますが、他の画像で試したことがあります(このスケッチを使用していません)。
    何が問題になっていますか?

    4

    1 に答える 1

    2

    次のコードは正常に動作します。

    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();
    } 
    

    私の推測では、 loadPixels() の代わりにimg .loadPixels() を書き忘れたか、スケッチのdraw()メソッドに何か問題があったのでしょう。

    于 2013-07-16T09:22:28.303 に答える