Hallo liebe Community,
ich hab folgendes Problem:
Eine .ppm Datei, inder lauter RGB-Werte stehen. Wir sollen nun diese Datei auslesen, und dann mit den ausgelesenen RGB Werten ein Bild in ein JPanel zeichnen.
Dazu hab ich mir folgendes überlegt, was aber irgendwie nicht wirklich funktionieren will, denn ich bekomm maximal 1 Rechteck gezeichnet.
Ich muss wohl dazu sagen, das in dem Array pixels genau die Anzahl an Werten ist, die man zur Füllung von 200*297 Pixeln braucht!
Mein Code :
Ich hoffe ihr könnt mir helfen, dieses Programm zu laufen zu bringen.
Danke schon mal
ich hab folgendes Problem:
Eine .ppm Datei, inder lauter RGB-Werte stehen. Wir sollen nun diese Datei auslesen, und dann mit den ausgelesenen RGB Werten ein Bild in ein JPanel zeichnen.
Dazu hab ich mir folgendes überlegt, was aber irgendwie nicht wirklich funktionieren will, denn ich bekomm maximal 1 Rechteck gezeichnet.
Ich muss wohl dazu sagen, das in dem Array pixels genau die Anzahl an Werten ist, die man zur Füllung von 200*297 Pixeln braucht!
Mein Code :
PHP:
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.BufferedReader;
import java.io.FileReader;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class ImageViewer extends JPanel {
private static JPanel myPanel = new JPanel();
private static final long serialVersionUID = -5493895888587697007L;
public BufferedImage bufPic;
public int width;
public String[] pixels;
public int height;
public ImageViewer(String[] pixels) {
super();
this.pixels = new String[pixels.length];
width = 200;
height = 297;
bufPic = new BufferedImage(200, 297, BufferedImage.TYPE_INT_RGB);
this.updateImage(pixels, width, height);
}
public void updateImage(String[] pixels, int panWidth, int panHeight) {
int x = 1;
int y = 1;
for (int i = 0; i < pixels.length; i += 3) {
if (x == 200) {
x = 1;
y++;
}
int r = Integer.parseInt(pixels[i]);
int g = Integer.parseInt(pixels[i + 1]);
int b = Integer.parseInt(pixels[i + 2]);
int rgb = (r << 16) | (g << 8) | b;
bufPic.setRGB(x, y, rgb);
repaint();
x++;
}
}
// called when painted
public void paintComponent(Graphics g, int x, int y) {
super.paintComponent(g);
g.drawImage(bufPic,x, y, 1, 1, this);
repaint();
}
public static void main(String[] argv) throws Exception {
BufferedReader in = new BufferedReader(new FileReader(
"//E:/Studium/Elcipse/MG_Uebung_Bild/src/mystery.ppm"));
String str;
StringBuffer zeilen = new StringBuffer();
while ((str = in.readLine()) != null) {
zeilen.append(str);
}
in.close();
String rgbZahlen = zeilen.toString();
String[] splittArray = rgbZahlen.split(" ");
JFrame frame = new JFrame("Test1");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setAlwaysOnTop(true);
frame.setLocationByPlatform(true);
frame.setSize(200, 297);
myPanel.add(new ImageViewer(splittArray));
frame.add(myPanel, BorderLayout.CENTER);
frame.setVisible(true);
}
}
Ich hoffe ihr könnt mir helfen, dieses Programm zu laufen zu bringen.
Danke schon mal
Zuletzt bearbeitet: