Я пытаюсь использовать 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:
![enter image description here](https://i.stack.imgur.com/PfBKQ.png)
Quantized img:
![enter image description here](https://i.stack.imgur.com/tJQ1D.png)
Дальнейший анализ проблемы показывает, что массив inPixels заполнен неправильно;это заполнено три раза верхней третью исходного изображения.
Есть какие-нибудь указатели, как я могу это исправить?
Кроме того, есть ли хорошие ссылки + быстрый алгоритм квантования в Java?Я ищу алгоритм, который возьмет изображение TYPE_INT_BGR и создаст новое изображение TYPE_INT_BGR, но с меньшей фактической разницей в пикселях, поэтому его можно будет легко сдуть.
Например, если у нас есть два пикселя висходное изображение со значениями, такими как 255, 255, 234 и другое со значениями, такими как 255, 255, 236, они оба должны быть преобразованы в 255,255,240Приветствия