PGM darstellen

Status
Nicht offen für weitere Antworten.

UdjENE

Mitglied
Hi,
ich möchte auf meiner Gui ein PGM-Bild darstellen. Nachdem ich es ausprobiert habe
Code:
ImageIO.read(new File("bild.pgm"))
bekam ich nur eine Fehlermeldung und nix wurde angezeigt. Ich dachte daran, die einzelnen Bytes auszulesen und Pixel für Pixel zu zeichnen, da ich ja die Breite und Höhe aus der PGM-Datei auslesen kann. Kennt jemand einen einfacheren Weg ein pgm darzustellen?
 
G

Gast

Gast
ganz einfach: imageio unterstützt pgm nicht. glaub java unterstützt die formate generell nicht. ironischerweise, die hat nämlich sun erfunden ^^

benutz ne andere lib wie z.b. jimi http://java.sun.com/products/jimi/ , die sollte das können. wenn das auch nicht klappt, guck dir mal das pgm format an (z.b. auf wikipedia) ist wirklich einfach und in nem 3 zeiler implementiert.
 

UdjENE

Mitglied
ok, also jimi unterstützt kein PGM. so ein PGM-Format ist nicht kompliziert. weiss jemand wie ich die Graustufen aus der PGM-Datei darstellen kann?
 

mikachu

Top Contributor
UdjENE hat gesagt.:
so ein PGM-Format ist nicht kompliziert. weiss jemand wie ich die Graustufen aus der PGM-Datei darstellen kann?
???:L :autsch:

wenns im internet nix gibt, isses wohl doch nicht so unkompliziert :wink:
 

UdjENE

Mitglied
falls es jemanden interessiert, hier meine lösung:
Code:
roChannelPGM = new RandomAccessFile("socketNew\\schiff.pgm", "r").getChannel();
bufferPGM = roChannelPGM.map(FileChannel.MapMode.READ_ONLY, 0, (int)roChannelPGM.size());

protected void paintComponent( Graphics g ) { 
		
		int xStart = 10;
		int yStart = 10;
		String tmpWidth = "";
		String tmpHeight= "";
		int greyValue = 0;
		
		for(int i=0; i<bufferPGM.limit(); i++){
			output.write((char)bufferPGM.get(i));
		}	
		
		byte[] pgmCodeByte = output.toByteArray();
		int[] pgmCode = unsignedByteArrayToInt(pgmCodeByte);
		
		int n = 0;
		int count = 0;
		
		// ignoriere Zeichen bis zum 2. LineFeed
		while(count != 2){
			if(pgmCode[n] == 10)
				count++;
			n++;
		}
				
		//lese Bildbreite:
		do{
			tmpWidth += String.valueOf((char)pgmCode[n]);
			n++;
		}while(pgmCode[n] != 32);
		
		widthPGM = Integer.parseInt(tmpWidth);
		
		//lese Bildhöhe:
		n++;
		do{
			tmpHeight += String.valueOf((char)pgmCode[n]);
			n++;
		}while(pgmCode[n] != 10);
		
		heightPGM = Integer.parseInt(tmpHeight);
		
		//springe bis zum ersten Pixel:
		do{
			n++;
		}while(pgmCode[n] != 10);
	
		System.err.println(pgmCode[n]);
		
		n++;
		
		for(int y=0; y<heightPGM; y++){
			for(int x=0; x<widthPGM; x++){
				greyValue=pgmCode[n];
				g.setColor( new Color( greyValue, greyValue, greyValue) );
				g.drawLine( xStart+x, yStart+y, xStart+x, yStart+y );
				n++;
			}
		}
	}

naja ich bin noch nicht ganz zufrieden, weil das umwandeln von einem Byte-array in ein Int-array nimmt schon wertvolle Rechenzeit in Anspruch. weiss jemand wie man das verhindern kann??
wenn jemand eine andere Lösung hat, dann bitte posten.
 
K

Kreba

Gast
Ich musste auch mal so etwas machen. Hier meine Lösung

Ich benutzte Graphics2D.drawImage(BufferedImage, BufferedImageOp, int, int) mit einem BufferedImage vom Typ TYPE_BYTE_GRAY.

Mit einem BufferedInputStream konnte ich die Daten quasi gratis auslesen. Dazu reicht nach dem PGM-Header einen Aufruf à la
inputStream.read( ((DataBufferByte)pgmImage.getRaster().getDataBuffer()).getData() );

Achte darauf, das BufferedImage bereits mit den richtigen Ausmassen zu erstellen. Die konntest du ja dem Header entnehmen.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
berserkerdq2 Weiß jemand wie ich im Scenebuilder das Fenster so darstellen kann, dass beim Vollbildmodus die Objekte so angezeigt werden? Allgemeine Java-Themen 1
M Wie könnte man den Codeschnipsel rekursiv darstellen? Allgemeine Java-Themen 1
S Neues Objekt darstellen Allgemeine Java-Themen 4
J Code Page characters darstellen Allgemeine Java-Themen 12
C Symbol für Gaußsche Summenformel in Kommentarzeile darstellen Allgemeine Java-Themen 3
E Swing Array mit Bildern in GUI darstellen Allgemeine Java-Themen 2
A Kalender darstellen Allgemeine Java-Themen 1
D JPanel in Mail darstellen Allgemeine Java-Themen 30
T 4x4 Tabelle als Bitboard darstellen Allgemeine Java-Themen 5
KilledByCheese 2D-Grafik 2D-Array als Gitter darstellen Allgemeine Java-Themen 2
D AWT Tiff-Datei darstellen bzw in darstellbares Format umwandeln Allgemeine Java-Themen 2
L Best Practice Log Dateien analysieren und eventuell passende Daten am Chart darstellen Allgemeine Java-Themen 1
S Text in mehreren Sprachen korrekt darstellen? Wie waehle ich die Fonts aus..? Allgemeine Java-Themen 0
K AWT Aus einer Datei die Koordinaten Angaben herauslesen und dreidimensional darstellen Allgemeine Java-Themen 2
M DYGraphen darstellen... fehlende Einstellungen Allgemeine Java-Themen 1
L Zwei Files miteinander vergleichen und Grafisch darstellen Allgemeine Java-Themen 1
M Temperaturverlauf in Farbe darstellen Allgemeine Java-Themen 8
J [JPA] Overlaps mit JPQL darstellen Allgemeine Java-Themen 2
R Hierarchie mit HashMap darstellen Allgemeine Java-Themen 19
K Java Operatoren mit Strings darstellen Allgemeine Java-Themen 8
Crashbreaker RCP-View Image öffnen und darstellen Allgemeine Java-Themen 7
A Excel Tabelle in JFrame darstellen Allgemeine Java-Themen 6
K Beziehung darstellen Allgemeine Java-Themen 4
B ASCII als 8-bit Binärstring darstellen Allgemeine Java-Themen 5
J Hex Werte in Bitmap Raster darstellen Allgemeine Java-Themen 16
0 2D-Grafik Wertegruppen darstellen Allgemeine Java-Themen 2
B Excel Datei in einem Java Programm mit GUI darstellen Allgemeine Java-Themen 9
C BigInteger in Exponentialschreibweise darstellen Allgemeine Java-Themen 2
S Java-Klassen Abhaengigkeiten grafisch darstellen? Allgemeine Java-Themen 4
R sHotEqn --> LaTeX-Code darstellen Allgemeine Java-Themen 8
E Wie Hexzahl als String darstellen? Allgemeine Java-Themen 4
S suche library die diagramme darstellen kann Allgemeine Java-Themen 2
G Kommazahlen mit Komma in Textfeld darstellen Allgemeine Java-Themen 11
A Text durchgestrichen in einer Tabelle darstellen Allgemeine Java-Themen 2
P Chart, Kennlinien darstellen Allgemeine Java-Themen 3
G Diagramm darstellen mit Javascript Allgemeine Java-Themen 41
P Images abwechselnd Darstellen Allgemeine Java-Themen 12
E Image auf einem JLabel darstellen Allgemeine Java-Themen 3
G diagramm um Zustände darstellen zu können Allgemeine Java-Themen 5
Y Zeichen verschiedenfarbig in einer JTextPane darstellen Allgemeine Java-Themen 17
E Spezielle Buchstaben darstellen? Allgemeine Java-Themen 7
R Bild downloaden und darstellen lassen Allgemeine Java-Themen 5
D Mathematische Funktion grafisch in Java darstellen Allgemeine Java-Themen 2
L Spielerei: Frame rekursiv darstellen Allgemeine Java-Themen 3
G Mathematische Zeichen darstellen Allgemeine Java-Themen 6
thE_29 Wie hex Zahlen darstellen Allgemeine Java-Themen 3
K Vektoren darstellen. Allgemeine Java-Themen 3

Ähnliche Java Themen

Neue Themen


Oben