Выполнение эффекта пикселизации - операция с низко висящими фруктами BufferedImage
.
Это можно выполнить в два этапа:
- Определите цвет одного блока пикселизации.
- Заполните блок пикселизации на изображении.
Шаг 1: Определите цвет:
public static Color determineColor(BufferedImage img, int x, int y, int w, int h) {
int cx = x + (int)(w / 2);
int cy = y + (int)(h / 2);
return new Color(img.getRGB(cx, cy), true);
}
В методе determineColor
цвет пикселя от центра BufferedImage
определяется и передается вызывающей стороне.
Шаг 2. Заполните блок пикселизации определенным цветом:
BufferedImage sourceImg = ...; // Source Image.
BufferedImage destimg = ...; // Destination Image.
Graphics g = destImg.createGraphics();
int blockSize = 8;
for (int i = 0; i < sourceImg.getWidth(); i += blockSize) {
for (int j = 0; j < sourceImg.getHeight(); j += blockSize) {
Color c = determineColor(sourceImg, i, j, blockSize, blockSize);
g.setColor(c);
g.fillRect(i, j, blockSize, blockSize);
}
}
g.dispose();
Несмотря на то, что кода довольно много, этот эффект является интеллектуально низко висящим фруктом - здесь не так много сложного. Это в основном нахождение центрального цвета блока и заполнение коробки этим цветом. Это довольно наивная реализация, поэтому могут быть более эффективные способы сделать это.
Ниже приведено сравнение до и после выполнения вышеуказанного эффекта пикселизации: