QuantizeFilterをで使用しようとしています
http://www.jhlabs.com/ip/filters/index.html
スクリーンショットの色深度を減らすため。
これが私の非常に単純なコードです:
Robot robo = new Robot();
BufferedImage notQuantized = robo.createScreenCapture( new Rectangle ( 0, 0, 300, 300 ) );
BufferedImage Quantized = new BufferedImage( 300, 300, BufferedImage.TYPE_INT_BGR);
File nonquantized = new File ("C:\\nonquantized.png");
File quantized = new File("C:\\quantized.png");
nonquantized.createNewFile();
quantized.createNewFile();
QuantizeFilter bla = new QuantizeFilter();
int [] outPixels = new int[300*300*3];
int [] inPixels = new int[300*300*3];
notQuantized.getRaster().getPixels( 0, 0, 300, 300, inPixels );
bla.quantize( inPixels, outPixels, 300, 300,2, true, true );
Quantized.getRaster().setPixels( 0, 0, 300, 300, outPixels );
ImageIO.write( Quantized, "png", quantized );
ImageIO.write( notQuantized, "png", nonquantized );
しかし、私に残されているのは次のとおりです。
元の画像:
量子化されたimg:
問題をさらに分析すると、inPixels配列が正しく入力されていないことがわかります。元の画像の上3分の1で3回塗りつぶされます。
どうすればそれを修正できるのでしょうか?
さらに、Javaのリンクグッド+高速量子化アルゴリズムはありますか?私が探しているのは、TYPE_INT_BGR画像を取得し、新しいTYPE_INT_BGR画像を生成するアルゴリズムですが、実際のピクセル差が少ないため、簡単に収縮する可能性があります。
たとえば、元の画像に255、255、234などの値を持つ2つのピクセルがあり、255、255、236などの値を持つ別のピクセルがある場合、両方を255,255,240に変換する必要があります。乾杯