Я пытаюсь сознательно испортить входное изображение.
BufferedImage bImage = ImageIO.read(new File("input.jpg"));
ByteArrayOutputStream bos = new ByteArrayOutputStream();
ImageIO.write(bImage, "jpg", bos);
byte[] data = bos.toByteArray();
for (int x = 0; x < bImage.getHeight(); x++) {
int yesNo = (int) Math.round(Math.random());
int r = (int) (Math.random() * 255);
int g = (int) (Math.random() * 255);
int b = (int) (Math.random() * 255);
Color myColor = new Color(r, g, b);
if (yesNo == 1) {
data[x] = (byte) myColor.getRGB();
}
}
ByteArrayInputStream bis = new ByteArrayInputStream(data);
BufferedImage bImage2 = ImageIO.read(bis);
ImageIO.write(bImage2, "jpg", new File("output.jpg"));
Когда я преобразовываю свое изображение в байтовый массив и изменяю значения, оно иногда выводит серые пиксели вместо случайных цветных. Вот мой ввод и вывод (мой друг предложил изображение, а не я).
входное изображение и выходное изображение
Я также провел некоторые исследования и обнаружил, что если я открою файл в шестнадцатеричном редакторе и изменим значения случайным образом, это даст мне желаемый результат. Может быть, я мог бы как-то повторить это в Java? ( желаемое изображение . Не против, если оно будет более запутанным.)