gmanrainy
@gmanrainy
Увлекаюсь программированием , java , android , c#

Как разделить изображение на три слоя R G B?

Здравствуйте, как можно разбить одно изображение на 3 изображения содержащих по одному каналу из исходного изображения и собрать эти три изображение обратно?
  • Вопрос задан
  • 2838 просмотров
Пригласить эксперта
Ответы на вопрос 3
@leopik
Если есть возможность прочитать изображение по пикселям, то каждый пиксель это RRGGBB в hex представлении. Соответственно чтобы получить канал красного нужно применить к каждому пикселю маску 110000. Для каждого канала своя маска - зеленый 001100 и голубой - 000011.
Чтобы собрать обратно - суммировать три соответствующих пикселя из трех представлений
Ответ написан
Комментировать
Labunsky
@Labunsky
Я есть на хабре
public static BufferedImage[] splitToRGB(BufferedImage original) {
    BufferedImage R =  new BufferedImage(
            original.getWidth(), original.getHeight(),
            BufferedImage.TYPE_INT_RGB
    );
    BufferedImage G =  new BufferedImage(
            original.getWidth(), original.getHeight(),
            BufferedImage.TYPE_INT_RGB
    );
    BufferedImage B =  new BufferedImage(
            original.getWidth(), original.getHeight(),
            BufferedImage.TYPE_INT_RGB
    );

    for (int x = 0; x < original.getWidth(); x++)
        for (int y = 0; y < original.getHeight(); y++) {
            final int rgb = original.getRGB(x, y);

            R.setRGB(x, y, rgb & 0xff0000);
            G.setRGB(x, y, rgb & 0xff00);
            B.setRGB(x, y, rgb & 0xff);
        }

    return new BufferedImage[]{R, G, B};
}

public static BufferedImage mergeRGB(BufferedImage R, BufferedImage G, BufferedImage B) {
    BufferedImage original =  new BufferedImage(
            R.getWidth(), R.getHeight(),
            BufferedImage.TYPE_INT_RGB
    );

    for (int x = 0; x < original.getWidth(); x++)
        for (int y = 0; y < original.getHeight(); y++) {
            final int rgb = R.getRGB(x, y) | G.getRGB(x, y) | B.getRGB(x, y);
            original.setRGB(x, y, rgb);
        }

    return original;
}
Ответ написан
@thrhrthr
Я это Я
Если есть Фотошоп то
9918b5dc1ab54fe4b7afbe7500cc907e.png
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы