Как создать изображение из пикселей, сохраненных как r, g, b, каждый из которых занимает различную позицию в массиве? - PullRequest
1 голос
/ 12 февраля 2012

Я читаю изображение .jpg и обращаюсь к пикселям как:

if (type == BufferedImage.TYPE_3BYTE_BGR) {
   System.out.println("type.3byte.bgr");
   byte[] pixels = (byte[]) sourceImage.getData().getDataElements(0, 0, w, h, null);
}

// обрабатываем этот массив с именем пикселов и отображаем полученное изображение // сначала я преобразую егоцелое число

int offseet=0;
   int[] data=new int[width*height*3];
   for ( i = 0; i < data.length; i++) { 
       data[i] = pixels[offset++] & 0xff;
     }

// и затем обработать этот массив. Пока я не обрабатываю это .Теперь, когда я создаю буферизованное // изображение из массива data и отображаю его, отображаемое изображение не совпадает.// код, который я использую, это

 writeEdges(data);


private BufferedImage edgesImage;   
private void writeEdges(int arb[]) {
    if (edgesImage == null) {
    edgesImage = new BufferedImage(w, h, BufferedImage.TYPE_INT_RGB);
    }

    edgesImage.getWritableTile(0, 0).setDataElements(0, 0, width,height, arb);
 }

// для изображения penguins.jpg (предоставлено в примерах изображений в windows 7)!

image

вывод, который я получаю

image

1 Ответ

0 голосов
/ 12 февраля 2012

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

public static void main(String[] args) {

        BufferedImage sourceImage = null;
        try {
            sourceImage = ImageIO.read(new File("IScSH.jpg"));
        } catch (IOException e) {
        }

        int type = sourceImage.getType();
        int w = sourceImage.getWidth();
        int h = sourceImage.getHeight();
        byte[] pixels = null;
        if (type == BufferedImage.TYPE_3BYTE_BGR) {
            System.out.println("type.3byte.bgr");
            pixels = (byte[]) sourceImage.getData().getDataElements(0, 0, w, h, null);
        }
        try {
            BufferedImage edgesImage = new BufferedImage(w, h, BufferedImage.TYPE_3BYTE_BGR);
            edgesImage.getWritableTile(0, 0).setDataElements(0, 0, w, h, pixels);
            ImageIO.write(edgesImage, "jpg", new File("nvRhP.jpg"));
        } catch (IOException e) {
        }
    }
...