2017-03-27 15 views
0

画像のピクセルに色の変更を適用する際に問題があります。Javafxでカラー画像を赤、緑、青に変更

for (int x = 0; x < w; x++) { 
      for (int y = 0; y < h; y++) { 
       int pixel = pixelReader.getArgb(x, y); 
       int alpha = ((pixel >> 24) & 0xff); 
       int red = ((pixel >> 16) & 0xff); 
       int green = ((pixel >> 8) & 0xff); 
       int blue = (pixel & 0xff); 

       int avg = (int)(red + green + blue)/3; 
       pixel = (alpha << 24) | (avg << 16) | (avg << 8) | avg; 

       writer.setArgb(x, y, pixel); 

      } 
     } 
     kittenImage.setImage(newImage); 

私が言ったように、正常に動作します:これは正常に動作し、グレースケールのために私が使用しているコードは、例えば、演算によって行われなければなりません。私はまた、赤、緑、青に画像を変更する必要があり、私はそれを調整するためにそのコードで遊んだ。ここでは、赤フィルタのコードは次のとおりです。

for (int x = 0; x < w; x++) { 
      for (int y = 0; y < h; y++) { 
       int pixel = pixelReader.getArgb(x, y); 
       int alpha = ((pixel >> 24) & 0xff); 
       int red = ((pixel >> 16) & 0xff); 
       int green = ((pixel >> 8) & 0xff); 
       int blue = (pixel & 0xff); 

       int redLevel = (0 << 24) | (red << 16) | (0 << 8) | 0; 
       writer.setArgb(x, y, -redLevel); 
      } 
     } 
     kittenImage.setImage(newImage); 

私はちょうど最も顕著であったものを色の周りに変更される可能性があることを望んでいたが、そのコードは私が必要なものではありませんネガティブ探し赤画像を取得します。

私はこれを明らかに写真に載せることができないので、私が意味することを示すためにそれを行う方法を理解する必要があります。私はこれを研究しており、グレースケールで豊富に見つかりましたが、赤、青、緑のすべてが、私が探しているものではない組み込みの関数やメソッドを指しているようです。

これは私の2番目の質問ですので、追加情報を含める必要がある場合はお知らせください。

EDIT:これはグレースケールを取得した場所で、RGBの代わりにArgbを使用した別のバージョンで修正しました。 (私はバッファリングされたイメージを使用していません)。 convert a RGB image to grayscale Image reducing the memory in java

これはARGBバージョンです:http://skrb.hatenablog.com/entry/2013/01/07/171901

答えて

0

ネヴァーマインド、私はそれで遊んで保ち、私が間違って何をやっていたが実現しました。既に存在するピクセル変数を使用する必要があるときに、ピクセルの新しいint変数を宣言していました。同様に:

for (int x = 0; x < w; x++) { 
      for (int y = 0; y < h; y++) { 
       int pixel = pixelReader.getArgb(x, y); 
       int alpha = ((pixel >> 24) & 0xff); 
       int red = ((pixel >> 16) & 0xff); 
       int green = ((pixel >> 8) & 0xff); 
       int blue = (pixel & 0xff); 

       pixel = (alpha << 24) | (red << 16) | (0 << 8) | 0; 
       writer.setArgb(x, y, pixel); 
      } 
     } 
     kittenImage.setImage(newImage); 

"int redLevel"の代わりに、これは以前宣言されたピクセルであり、完全に機能しました。うまくいけば、これは誰かを助けることができる。

関連する問題