Фалшиво цветно изображение в Java от стек

Имам 3 изображения в сива скала, които искам да оцветя, зададох подобен въпрос миналата седмица и се възползвах от съвета там, имам кода по-долу, който чете RGB стойностите за всеки пиксел в изображението. Искам да направя това за всяко отделно изображение, т.е. 1-во изображение прочете стойност на червени пиксели, 2-ро изображение прочете стойност на сини пиксели и 3-то изображение прочете стойност на зелени пиксели и създам ново изображение от това. Опитах да повторя кода 3 пъти, но изглеждаше, че го прилага към един пиксел и продължава да го повтаря, но не можах да разбера защо; По същество копирах и поставих кода 3 пъти, но съм сигурен, че има по-кратък и по-лесен начин, но не съм сигурен какъв!

Чета изображението, като използвам следното:

public static void main(final String args[])
    throws IOException
{
    File file = new File("src/resources/rgb.jpg");
    BufferedImage src = ImageIO.read(file);
    BufferedImage image = toBufferedImage(src);
    save(image, "png");
}

private void img1(BufferedImage image, BufferedImage src) {
    for (int x = 0; x < image.getWidth(); x++) {
        for (int y = 0; y < image.getHeight(); y++) {

            int clr = src.getRGB(x, y);
            int red = (clr & 0x00ff0000) >> 16;
            //int green = (clr & 0x0000ff00) >> 8;
            //int blue = clr & 0x000000ff; 

        }
    }
}

Така че по същество трябва да повторя кода 3 пъти и след това да създам ново изображение от резултата. Просто се чудя дали някой може да помогне?

Благодаря предварително


person user2517280    schedule 25.10.2013    source източник


Отговори (1)


Издърпайте двойния си цикъл for в метод (не сте сигурни как точно искате да работи):

private void doStuffToImage(Image image, Image src) {
  for (int x = 0; x < image.getWidth(); x++) {
    for (int y = 0; y < image.getHeight(); y++) {
      final int clr = src.getRGB(x, y);
      final int red = (clr & 0x00ff0000) >> 16;
      final int green = (clr & 0x0000ff00) >> 8;
      final int blue = clr & 0x000000ff;
    }
  }
}

Освен това изхвърлете всички finals.

person yamafontes    schedule 25.10.2013
comment
Като създавам метода, както предложихте по-горе, дефинирам ли всички променливи в основния метод? - person user2517280; 25.10.2013
comment
Не, просто ги запазете като локални променливи за този метод, освен ако не ви трябват навън. Както казах, не съм напълно сигурен какво се опитвате да направите, но нещо подобно ще намали дублирането на код. - person yamafontes; 25.10.2013
comment
В момента просто се опитвам да заредя 3 буферирани изображения и да получа променливите за червено, зелено и синьо за всяко, както в кода по-горе. Редактирах кода си в оригиналния пост, това ли имахте предвид? - person user2517280; 25.10.2013