Как обесцветить изображение imageicon на java?

Пользователь

от elissa , в категории: Java , 7 месяцев назад

Как обесцветить изображение imageicon на java?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

Пользователь

от jedidiah.brown , 7 месяцев назад

@elissa 

Для обесцвечивания изображения ImageIcon в Java можно воспользоваться классом BufferedImage. Вот пример кода:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
import javax.swing.*;
import java.awt.*;
import java.awt.image.*;

public class ImageUtils {
    public static ImageIcon decolorizeImage(ImageIcon imageIcon) {
        Image image = imageIcon.getImage();
        
        // Создаем новый BufferedImage с типом TYPE_INT_ARGB, чтобы сохранить прозрачность
        BufferedImage bufferedImage = new BufferedImage(
                imageIcon.getIconWidth(), imageIcon.getIconHeight(), BufferedImage.TYPE_INT_ARGB);

        // Копируем изображение в BufferedImage
        Graphics2D graphics = bufferedImage.createGraphics();
        graphics.drawImage(image, 0, 0, null);

        // Обрабатываем каждый пиксель изображения
        int width = bufferedImage.getWidth();
        int height = bufferedImage.getHeight();
        for (int y = 0; y < height; y++) {
            for (int x = 0; x < width; x++) {
                int pixel = bufferedImage.getRGB(x, y);

                // Получаем значения красного, зеленого и синего цвета пикселя
                int red = (pixel >> 16) & 0xff;
                int green = (pixel >> 8) & 0xff;
                int blue = pixel & 0xff;

                // Обесцвечиваем пиксель
                int average = (red + green + blue) / 3;
                pixel = (average << 16) | (average << 8) | average;

                // Присваиваем новое значение пикселю
                bufferedImage.setRGB(x, y, pixel);
            }
        }

        // Создаем новый ImageIcon с обесцвеченным изображением
        ImageIcon decolorizedIcon = new ImageIcon(bufferedImage);
        return decolorizedIcon;
    }
}


Пример использования:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
ImageIcon originalIcon = new ImageIcon("original_image.png");

// Обесцвечиваем изображение
ImageIcon decolorizedIcon = ImageUtils.decolorizeImage(originalIcon);

// Устанавливаем обесцвеченное изображение в JLabel
JLabel label = new JLabel(decolorizedIcon);

// Отображаем JLabel в окне
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(label);
frame.pack();
frame.setVisible(true);


Обратите внимание, что в этом примере используется JFrame и JLabel из пакета javax.swing, чтобы отобразить изображение в окне. Вы можете использовать другие способы отображения обесцвеченного изображения, в зависимости от ваших потребностей.

Пользователь

от hoyt.jerde , месяц назад

@elissa 

Приведенный код является хорошим примером того, как можно обесцветить изображение ImageIcon в Java. Однако, следует учитывать, что данный подход изменяет изображение напрямую, что может быть нежелательным в определенных сценариях. Вместо этого, при работе с изображениями может быть более безопасным создать копию изображения и выполнять все манипуляции с копией.


Также, обратите внимание, что данный пример обесцвечивает изображение, вычисляя среднее значение каналов цвета (красный, зеленый, синий) пикселя и присваивая им это значение. Если вам нужно другое поведение, например, применение фильтра или других методов обесцвечивания, вам придется изменить логику внутри метода decolorizeImage.


Надеюсь, это поможет вам обесцветить изображение ImageIcon в Java. Если у вас есть какие-либо дополнительные вопросы, пожалуйста, не стесняйтесь задавать.