Aus Array Bild zeichnen

alive

Erfahrenes Mitglied
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 :
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:
Hat zwar keiner geantwortet, aber vlt hat ja mal jemand drüber nach gedacht :) habe es gelöst hier noch mal der ganze code

PHP:
import java.awt.Color;
import java.awt.Graphics;
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;

import javax.swing.*;

public class ImageViewer extends JPanel {

	private static final long serialVersionUID = -7131457822541112922L;

	public ImageViewer() {
		fensterErzeugen();
	}

	public void fensterErzeugen() {
		JFrame frame = new JFrame("Test1");
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setAlwaysOnTop(true);
		frame.setLocationByPlatform(true);
		frame.setSize(200, 297);
		frame.getContentPane().add(this);
		frame.setVisible(true);
	}

	public static void main(String[] argv) throws Exception {

		new ImageViewer();
	}

	protected void paintComponent(Graphics g) {
		super.paintComponent(g);

		BufferedReader in = null;
		try {
			in = new BufferedReader(new FileReader(
					"E:/Studium/Elcipse/MG_Uebung_Bild/src/mystery.ppm"));
		} catch (FileNotFoundException e1) {
			e1.printStackTrace();
		}
		String str;
		StringBuffer zeilen = new StringBuffer();
		int z = 0;
		try {
			while ((str = in.readLine()) != null) {
				if (z < 6) {
				} else {
					zeilen.append(str);
				}
				z++;
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
		try {
			in.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
		String rgbZahlen = zeilen.toString();
		String[] splittArray = rgbZahlen.split(" ");
		int y = 0;
		int x = 0;
		for (int i = 0; i < splittArray.length; i = i + 3) {
			if (x == 200) {
				x = 0;
				y++;
			}

			int rval = Integer.parseInt(splittArray[i]);
			int gval = Integer.parseInt(splittArray[i + 1]);
			int bval = Integer.parseInt(splittArray[i + 2]);
			g.setColor(new Color(rval, gval, bval));
			g.fillRect(x, y, 1, 1);
			x++;
			repaint();
		}
	}

}

danke bis zum nächsten mal
 

Neue Beiträge

Zurück