2 Stimmen

Java BufferedImage Graustufenverschlechterung

Ich erstelle ein einfaches Programm, das ein Graustufenbild als Eingabe akzeptiert und das Farbinformationen jedes Pixels abruft und in einem Array von Objekten speichert, das ich Pixelklasse nenne. Das ultimative Ziel ist es einfach, das Bild zu einer neuen BufferedImage neu zu malen, wobei die erworbenen Farbinformationen verwendet werden.

Code zum Erstellen des Pixelarrays aus einem gegebenen Bild.

    public static Pixelklasse[][] getPixelArray(BufferedImage bi){
    int Höhe = bi.getHeight();
    int Breite = bi.getWidth();
    Pixelklasse[][] pixelArray = new Pixelklasse[Höhe][Breite];
    for(int i = 0 ; i < Höhe ; i++){
        for(int j = 0 ; j < Breite ; j++){
            pixelArray [i] [j] = new Pixelklasse(bi.getRGB(j, i));
        }
    }
    return pixelArray;
}

Code, um zu versuchen, das genannte Bild mit dem Array von Pixelklasse-Objekten neu zu malen

    public void paintToPanel(Pixelklasse [][] pc, int Höhe, int Breite){
    BufferedImage nbi = new BufferedImage(Breite, Höhe,BufferedImage.TYPE_INT_RGB);
    for ( int i = 0 ; i < Höhe ; i++){
        for ( int j = 0 ; j < Breite ; j++){
            nbi.setRGB(j, i, pc[i][j].getRGBValue());
        }
    }
    JLabel containerLabel = new JLabel(new ImageIcon(nbi));
    containerLabel.setBounds(10,10,nbi.getHeight(), nbi.getWidth());
    this.add(containerLabel);
}

Links zu den Originalbildern

http://sphotos.ak.fbcdn.net/hphotos-ak-snc4/hs1364.snc4/163667_172099429501181_100001033756527_413302_3062182_n.jpg

Wie Sie sehen können, gibt es eine signifikante Verschlechterung in der Bildqualität. Das resultierende Bild scheint verblasst zu sein.

1voto

AndyT Punkte 1333

Ich würde vorschlagen, die MemoryImageSource-Klasse zu verwenden. Etwas wie :

byte[] pixels = // deine Pixel
ColorSpace cs = ColorSpace.getInstance(ColorSpace.CS_GRAY); 
int bits[] = new int[] {8};

ColorModel cm = new ComponentColorModel(cs, bits, false, false, Transparency.OPAQUE, DataBuffer.TYPE_BYTE);

MemoryImageSource mis = new MemoryImageSource(width, height, cm, pixels, 0, width);

Image im = Toolkit.getDefaultToolkit().createImage(mis);

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X