Создание собственного BufferedImage - PullRequest
1 голос
/ 06 марта 2011

Я пишу метод, который принимает три двумерных массива int (представляющих значения R, G и B изображения), ширину и высоту, а также логическое значение, обозначающее, является ли указанное изображение цветным или черно-белым. Я хочу, чтобы метод создавал BufferedImage из заданных входных данных.

Вот что у меня есть:

public static BufferedImage createImage(int[][] r, int[][] g, int[][] b,
    int width, int height, boolean isColor) {

    BufferedImage ret;
    if (isColor)
        ret = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
    else
        ret = new BufferedImage(width, height, BufferedImage.TYPE_BYTE_GRAY);
    WritableRaster raster = ret.getRaster();

    for (int i = 0; i < height; i++) {
        for (int j = 0; j < width; j++) {
            if (isColor) {
                raster.setSample(j, i, 0, r[i][j]);
                raster.setSample(j, i, 1, g[i][j]);
                raster.setSample(j, i, 2, b[i][j]);
            }
            else
                raster.setSample(j, i, 0, r[i][j]);
        }
    }

    return ret;
}

Однако я написал модульный тест, который должен создать цветное изображение 5x5, заполненное белым (255, 255, 255), но растровые данные заполнены чрезвычайно большими значениями, а не 255. Я не слишком знаком с этим изображения и AWT в целом, поэтому я чувствую, что неправильно создаю BufferedImage. Я пытался ссылаться на Java API для BufferedImage, но мне не очень повезло, что он это выяснил. Любая помощь будет оценена.

1 Ответ

3 голосов
/ 06 марта 2011

Ваш код выглядит нормально для меня.Изображение должно быть заполнено 0xffffff (255 в каждом из R, G и B), что будет 16777215 в десятичном виде.(Если бы у вас был альфа-канал, то каждый полностью непрозрачный пиксель был бы 0xffffffff, который был бы -1 в десятичном виде.)

...