Я пытаюсь использовать 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 );
Однако то, что у меня осталось, это:
Исходное изображение:
Квантованные изображения:
Дальнейший анализ проблемы показывает, что массив inPixels заполнен некорректно; он трижды заполняется верхней третью исходного изображения.
Любые указатели, как я могу это исправить?
Кроме того, какие-либо ссылки на хороший + быстрый алгоритм квантования в Java? Я ищу алгоритм, который возьмет изображение TYPE_INT_BGR и создаст новое изображение TYPE_INT_BGR, но с меньшей фактической разницей в пикселях, чтобы его можно было легко сдуть.
Например, если у нас есть два пикселя в исходном изображении со значениями, такими как 255, 255, 234, и еще один со значениями, такими как 255, 255, 236, они оба должны быть преобразованы в 255 255 240. Ваше здоровье