Ввод png файлов в виде двумерного массива интергеров в Java - PullRequest
2 голосов
/ 17 февраля 2012

У меня есть два Png-файла в градациях серого (http://imgur.com/a/9F7UW), которые я хочу рассматривать как двумерный массив, чтобы я мог применить к ним маски.

Каков наилучший способ сделать это?

и, если возможно, конвертировать обратно, чтобы я мог показать замаскированные изображения при работе моей программы.

Это задание для университета, просто нужно знать, как получить данные, затем ясделает все остальное.

Большое спасибо

1 Ответ

4 голосов
/ 17 февраля 2012
try {
    URL url = new URL("http://i.imgur.com/Ad0AP.png");
    Image image = Toolkit.getDefaultToolkit().createImage(url);
} catch (MalformedURLException e) {
} catch (IOException e) {}

Затем вы можете преобразовать Image экземпляр в BufferedImage, используя это:

public static BufferedImage toBufferedImage(Image image) {
    if (image instanceof BufferedImage) {
        // Return image unchanged if it is already a BufferedImage.
        return (BufferedImage) image;
    }

    // Ensure image is loaded.
    image = new ImageIcon(image).getImage();

    BufferedImage bufferedImage = new BufferedImage(image.getWidth(null), image.getHeight(null),  BufferedImage.TYPE_INT_ARGB);
    Graphics g = bufferedImage.createGraphics();
    g.drawImage(image, 0, 0, null);
    g.dispose();

    return bufferedImage;
}

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

int w = i.getWidth();
int h = i.getHeight();

int[][] array = new int[w][h];
for (int j = 0; j < w; j++) {
    for (int k = 0; k < h; k++) {
        array[j][k] = i.getRGB(j, k); // or whatever
        System.out.println("jk=" + array[j][k]);
    }
}

сейчас .. сделай все остальное:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...