BufferedImage двойная граница - PullRequest
0 голосов
/ 01 марта 2012

Я пытаюсь продублировать пиксель границы n раз. Мне удалось сделать это для части верхней границы, но я борюсь с остальными. Есть ли более простой способ сделать это, так как это кажется слишком сложным для того, чего я пытаюсь достичь.

public BlurredImage(int n) {

    try {
        castle = ImageIO.read(this.getClass().getResource("test.png"));
    } catch (IOException e) {
        System.out.println("cannot read image");
    }

    int w = (2*n)+castle.getWidth();
    int h = (2*n)+castle.getHeight();

    int origW =castle.getWidth();
    int origH = castle.getHeight();
    System.out.println(w);
    System.out.println(h);
    BufferedImage enlargedImage = new BufferedImage(w, h, castle.getType());

    //Map existing image
    for (int y=0; y < origH; y++){
        for (int x=0; x < origW; x++){
            enlargedImage.setRGB(x+n, y+n, castle.getRGB(x, y));
        }
    }

    //Top border
    for (int y=0; y < n; y++){
        for (int x=0; x < origW; x++){
            enlargedImage.setRGB(x+n, y, castle.getRGB(x, 0));
        }
    }

    //Bottom border
    for (int y=0; y > y+n; y++){
        for (int x=0; x < origW; x++){
            enlargedImage.setRGB(x+n, y, castle.getRGB(x, 0));
        }
    }
}

1 Ответ

0 голосов
/ 02 марта 2012

Проблема с вашей нижней границей - это цикл for для значения y и .setRGB. Ваш .setRGB выглядит как копия / вставка верхней границы и получает / устанавливает тот же пиксель, что и код верхней границы. Я немного изменил ваш код: цикл y for теперь выполняет итерацию по необходимому количеству копий границ, а setRGB / getRGB ссылаются на правильные позиции в изображениях

//Bottom border
for (int y = 0; y < n; y++){
    for (int x = 0; x < origW; x++){
        enlargedImage.setRGB(x + n, h - 1 - y, castle.getRGB(x, origH - 1));
    }
}
...