# QR-Codes erzeugen.



## cjs1976 (29. Mrz 2012)

Hallo!

Kennt jemand von Euch eine wirklich funktionierende Lösung zum Erzeugen von qualitativ hochwertigen (also für den Druck geeigneten) QR-Codes (UTF-8, wegen der deutschen Sonderzeichen)?

Ich möchte aus meiner Anwendung heraus gewisse Daten (also nicht nur eine URL) in einen QR-Code verpacken, und den dann ausdrucken.

Nachdem ich nun schon einiges an Mist durchprobiert habe, wäre ich um jeden Tipp dankbar ;-)

Danke im Voraus,
Christian.


----------



## Ikaron (29. Mrz 2012)

Hey, benutz doch ein BufferedImage mit width und height 16x16 (So ist das ja bei QR-Codes, oder?) und dort setRGB(x, y, Color.black.getRGB() oder Color.white.getRGB());
Oder geht es um den Codec? Wenn das so ist, musst du mal nachlesen, wie QR-Codes erzeugt werden 
Hier ein Beispiel: http://upload.wikimedia.org/wikipedia/commons/2/21/QR_Character_Placement.svg
Wenn du eine funktionierende Bib suchst:
Java Barcode Library for Java Developers - download - BarcodeLib.com
Kannst du ja mal decompilen...


----------



## irgendjemand (29. Mrz 2012)

Ikaron hat gesagt.:


> setRGB(x, y, 0 für schwarz/16777215 für weiss);



DAS wird schiefgehen da du nur 24bit betrachtest ... setRGB aber einen 32bit int mit ALPHA erwartet ...

ergo : 0 = schwarz / -1 = weiß


----------



## Ikaron (29. Mrz 2012)

Sorry, hab's verbessert


----------



## HoaX (29. Mrz 2012)

irgendjemand hat gesagt.:


> DAS wird schiefgehen da du nur 24bit betrachtest ... setRGB aber einen 32bit int mit ALPHA erwartet ...
> 
> ergo : 0 = schwarz / -1 = weiß



Nein wird es nicht, aber es kann, aber so wie du schreibst ist es auch nicht richtig.

Es ist niemand gezwungen ein BufferedImage etc. mit Alphachannel anzulegen. Wer einfach TYPE_INT_RGB nimmt, der wird sehen dass Ikarons Lösung funktioniert.

Deine Antwort ist ganz falsch, denn a) geht es nicht immer schief, und dass setRGB 32 bit erwartet ist auch frei erfunden, hängt wie gesagt vom Typ ab, b) ist bei "0 = schwarz" 100% Transparenz eingestellt...


----------



## cjs1976 (2. Apr 2012)

Hallo!

Habe jetzt die Testversionen von

* Barcode for Java | Java Barcode Generator for Generating Barcode Images in Java Applications
* Java QR Code Generator generate, create QR-Code 2d barcode image in Java Class, JSP, Servlet application using Java Barcode Generator Library
* Barcodes for the Java[TM] Platform

probiert. Hat mit allen drei brav geklappt. Letztere scheinen mit EUR 55,00 sogar leistbar zu sein.

Werde aber noch ein bisschen weitertesten, um herauszufinden was für mich die brauchbarste Lösung zu sein scheint.

Wenn jemand noch andere APIs kennt, bitte sagen...

Danke,
Christian.


----------



## freez (4. Apr 2012)

Vielleicht ist ja auch ein Service im Internet eine interessante Alternative: QR Code API - Documentation, command ?create-qr-code? - QR-Server [QR Codes, QR Code, Software, SDK, Library, C++, PHP]


----------



## cjs1976 (4. Apr 2012)

Hi Freez!

Danke für den Tipp. Diese Lösung kannte ich schon, nur sind die Hersteller der API nicht erreichbar. Egal was ich versucht habe (E-Mails, Telefon...), ich habe keine Antwort bekommen.

Und so einen freien Deinst für eine kommerzielle Anwendung zu verwenden, finde ich 1. nicht fair, und 2. weiß man nie wie lange der Dienst angeboten wird.

Trotzdem danke...


----------



## freez (5. Apr 2012)

Ich gebe dir vollkommen recht ... ich kannte diesbezüglich deine Anforderungen nicht.

Aber das:


cjs1976 hat gesagt.:


> 1. nicht fair



verstehe ich nicht. Wieso ist es nicht fair kostenfreie Dienste zu nutzen, wenn die es erlauben?


----------



## cjs1976 (5. Apr 2012)

Ja, Du hast schon recht, das kann mir eigentlich egal sein. Ich finde nur, dass wenn man mit Software oder einem Dienst Geld verdient, dann soll auch der, der die Software oder den Dienst zur Verfügung stellt, etwas daran verdienen.

Witzig ist dabei nur, dass es entweder so teuer ist, dass es keinen Sinn macht (zB mehr als EUR 1.000,00 für so eine Barcode-API), oder gratis mit der Bitte um eine Spende, und ohne Rechnung ist das mit der Spende wieder so eine Sache.

Ein gutes Beispiel ist da OpenOffice. Das nehmen mittlerweile relativ viele Firmen her, um damit indirekt Geld zu verdienen. MS-Zeug muss man ja kaufen, und OO ist gratis. Danke. Und Spende? Ja wenn die das umsonst machen... Und dann auch noch schimpfen, wenn bei gratis mal was nicht gleich klappt...

Aber diese Diskussion gehört hier ja wohl nicht hin ;-)


----------



## turtle (6. Apr 2012)

Ich habe mal diese Software ausprobiert, die unter Apache  Lizenz steht.

Damit konnte ich QR Code images erzeugen und dekodieren.


----------



## lin83 (8. Apr 2012)

Welcome to Barcode4J
It's free, available under the Apache License, version 2.0
sehr einfach zu benutzen...


----------



## cjs1976 (14. Apr 2012)

LIN83: Hast Du die Software mal versucht? Ich kapiere das Ding einfach nicht. Keine Ahnung, wie das funktionieren soll!?

ALLGEMEIN: Ich habe jetzt festgestellt, dass ich eine Lösung brauche, die SAUBERE Vektorgrafiken (am Besten EPS) erstellen kann.

Sowas wäre gut: Esponce - Turning things into hyperlinks, aber als Kauflösung.

Danke!


----------



## Deros (16. Apr 2012)

Barcode4J nutze ich auch und kann ich nur empfehlen. Und ja es ermöglich auch EPS.


----------



## cjs1976 (17. Apr 2012)

Hallo Deros, Du kannst mir nicht zufällig ein kleines Muster posten, wie Du mittels Barcode4j einen QR-Code erzeugst? Auf der Webseite und bei den Beispielen habe ich nichts gefunden... Danke, Christian.


----------



## Deros (17. Apr 2012)

sicher doch, aber wenn du die Bibliothek herunterlädst findest du eigentlich auch jede Menge Anwendungsbeispiele...

aber direkt aus einer Anwendung von mir ein DatamatrixCode als jpg....anderer Code und anderes Ausgabeformat funktioniert halt analog


```
public static byte[] getPicBytes(String code, int dpi){
		byte[] picByte = null;
		try {
            //Create the barcode bean
            DataMatrixBean bean = new DataMatrixBean();
            bean.setShape(SymbolShapeHint.FORCE_SQUARE);

            ByteArrayOutputStream bytesa = new ByteArrayOutputStream();
            try {
                //Set up the canvas provider for monochrome JPEG output 
                BitmapCanvasProvider canvas = new BitmapCanvasProvider(
                		bytesa, "image/jpeg", dpi, BufferedImage.TYPE_BYTE_BINARY, false, 0);
            
                //Generate the barcode
                bean.generateBarcode(canvas, code);
            
                //Signal end of generation
                canvas.finish();
                picByte = bytesa.toByteArray();
            } finally {
            	bytesa.close();
            }
        } catch (Exception e) {
            //gelöscht
        }
		return picByte;
	}
```


----------



## Deros (17. Apr 2012)

Kommando zurück du musst die Jar aus dem svn nehmen da QR-Code wohl erst seit neuestem unterstützt wird, dann funktioniert es aber tatsächlich analog musst halt nicht die DataMatrixBean nehmen sondern die QRBean


----------



## cjs1976 (17. Apr 2012)

BARCODE4J: Ich geb auf! Nachdem ich verzweifelt eine QR-Code Anletung gesucht habe, und eigentlich auch nichts zusammengebracht habe (im Gegensatz zu den zuvor getesteten APIs), habe ich dann folgenden Hinweis gefunden: QR Code.


----------



## Deros (17. Apr 2012)

aber nur weil mir gerade langweilig war


```
package aaa;

import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

import org.krysalis.barcode4j.impl.qr.*;
import org.krysalis.barcode4j.impl.datamatrix.SymbolShapeHint;
import org.krysalis.barcode4j.output.bitmap.BitmapCanvasProvider;

public class test {

	public static void main(String[] args) {

		String strFilePath = "C://test//qr.jpg";
		try {
			FileOutputStream fos = new FileOutputStream(strFilePath);
			String strContent = "Write File using Java FileOutputStream example !";

			/*
			 * To write byte array to a file, use void write(byte[] bArray)
			 * method of Java FileOutputStream class.
			 * 
			 * This method writes given byte array to a file.
			 */

			fos.write(getPicBytes("Ist gar nicht so schwer", 300));

			/*
			 * Close FileOutputStream using, void close() method of Java
			 * FileOutputStream class.
			 */

			fos.close();

		} catch (FileNotFoundException ex) {
			System.out.println("FileNotFoundException : " + ex);
		} catch (IOException ioe) {
			System.out.println("IOException : " + ioe);
		}

	}

	public static byte[] getPicBytes(String code, int dpi) {
		byte[] picByte = null;
		try {
			// Create the barcode bean
			QRCodeBean bean = new QRCodeBean();
			// bean.setShape(SymbolShapeHint.FORCE_SQUARE);

			ByteArrayOutputStream bytesa = new ByteArrayOutputStream();
			try {
				// Set up the canvas provider for monochrome JPEG output
				BitmapCanvasProvider canvas = new BitmapCanvasProvider(bytesa,
						"image/jpeg", dpi, BufferedImage.TYPE_BYTE_BINARY,
						false, 0);

				// Generate the barcode
				bean.generateBarcode(canvas, code);

				// Signal end of generation
				canvas.finish();
				picByte = bytesa.toByteArray();
			} finally {
				bytesa.close();
			}
		} catch (Exception e) {
			// gelöscht
		}
		return picByte;
	}

}
```

und das ergebnis








der javacode ist nur gefuscht aber das sollte egal sein


----------



## cjs1976 (22. Apr 2012)

Vielen Dank, ich werde das gleich mal probieren...


----------



## AquaBall (20. Mai 2012)

Ich komm mir wieder mal blöd vor. (Bin wohl von Eclipse zu sehr verwöhnt)

Ich möchte in mein Programm QR-Code Im/Export einbauen.
Jetzt bin ich hier in diesem Post gelandet,
hab mir f:\2 install\Downloads\barcode4j-2.1.0-bin.zip runtergeladen.

... und nun -man verzeih mir meine Dummheit - find ich nicht was ich damit tun muss?!

- Ich hab keine Jar, die ich in Eclipse installieren kann.
- Eine jar erstellen geht nicht weil ich das Projekt nicht in Eclipse laden kann.
- Die beigelegt Bat bemängelt "Please set the JAVA_HOME environment variable." Darum hab ich mich in Eclipse nie kümmern müssen.

Deshalb meine Anfängerfrage:
  Wie kann ich so 'ne Bibliothek in Ecipse "installieren".


----------



## Deros (20. Mai 2012)

mal die barcode4j.jar im verzeichnis barcode4j-2.1.0-bin.zip\barcode4j-2.1.0\build probiert?!?

aber wie schon weiter oben von mir erwähnt solltest du wenn du qr-codes machen willst nen build von den sourcen im svn machen, aber irgendwie glaube ich, dass das dich schrecklich überfordern wird...nicht böse gemeint


----------



## AquaBall (20. Mai 2012)

Naja du hast schon recht, das mich das im Augenblick schrecklich überfordert.
Immerhin programmiere ich erst seit knapp 2 Monaten in Java.
Aber ich hoffe, dass mich das in 2 Stunden NICHT mehr überfordert.
Hab nur noch gar keine Ahnung von PackageHandling/Libraries/OrdnerUndPfaden in Java.

Deshalb ist mein Problem: Wie bring ich den Code in Eclipse rein, damit ich barcode4j.jar starten kann?
Mit Import ist mir keine Version gelungen, mit der ich etwas starten konnte.

Oder anders gefragt: Was muss ich tun, damit die roten Kringel unter 
	
	
	
	





```
import org.krysalis...
```
 verschwinden :lol:


PS: Meine Programmiererfahrung in anderen Sprachen reicht "etwas" länger zurück. ;-)


----------



## Deros (20. Mai 2012)

rechtsklick auf das projekt->properties->java build path->libraries-> add jar


----------



## cjs1976 (22. Mai 2012)

Hallo AquaBall!

Ich bin nach wie vor Programmieranfänger, aber vielleicht hielft Dir das Folgende weiter. Achtung: Ich gehe davon aus, Du schreibst eine Java SE und keine Java EE Anwendung, und Du verwendest kein Maven-Repository oder ähnliches, und Du arbeitest nicht im Team.

1. Speziell als Anfänger würde ich mir NetBeans UND Eclipse anschauen. Jedes hat seine Vor- und Nachteile, und vielleicht nimmst Du ja je nach Projektanforderung mal das eine, mal das andere.

2. APIs bekommst Du meistens als ZIP-Archiv. Und dieses Archiv enthält meistens eine JAR, die den gleichen Namen trägt wie das Programm. Diese JAR, und eventuell auch ein paar weitere Third-Party-JARs brauchst Du dann für Dein Programm. Was genau sagt Dir aber die Dokumentation des jeweiligen APIs. Achtung: Auf die Lizenz aufpassen!

3. Wenn man Third-Party-APIs in seinem Projekt verwendet, dann legt man diese meistens in einem Ordner mit dem Namen lib (oft auch ext) ab. Du darfst dann nicht vergessen, diese Dateien mitzugeben, und in den Classpath Deiner Anwendung reinzuschreiben (inkl. Pfad!). Sehr wahrscheinlich wirst Du Dein Programm als JAR-Datei ausliefern, dann muss der Classpath in die MANIFEST.MF.

4. Sowohl bei NetBeans als auch bei Eclipse gibt es verschiedenste Möglichkeiten, die Third-Party-JARs in das eigene Projekt einzubinden. Hier der für mich schnellste Weg:

4.1. Bei Netbeans musst Du beim Anlegen des Projektes die Option "Use Dedicated Folder for Storing Libraries" auswählen. Dann klickst Du mit der rechten Maustaste auf Libraries, und wählst "Add JAR/Folder...". Dann wählst Du die gewünschte Datei, und nicht vergessen, die Option "Copy to Libraries Folder" anzuwählen. Die Import-Anweisungen kannst Du Dir automatisch setzten lassen. Einfach auf die Glühbirne mit dem roten Punkt klicken, und dort die richtige "Add import for..." auswählen.

4.2. In Eclipse legst Du einfach einen Ordner lib an, und ziehst dann die Datei per Drag&Drop in den neuen lib-Ordner (Copy files wählen!). Dann klickst Du die Datei mit der rechten Maustaste an, und wählst "Build Path" -> "Add To Build Path". Du siehst die Datei dann im lib-Ordner und unter "Referenced Libraries". Die Import-Anweisungen kannst Du Dir automatisch setzten lassen. Einfach auf die Glühbirne mit dem roten Rechteck und dem weißen X darin anklicken, und dort die richtige "Import..." auswählen.

Die Profis hier können Dir sicher eine bessere Anleitungen geben! Ich will hier auch keinen Streit auslösen, welche IDE besser ist!

Gruß,
Christian.


----------



## AquaBall (23. Mai 2012)

Danke für den ausführlichen Tip!

Ein jar selbst erstellen und einbinden kann ich inzwischen.
Bei dem download 
	
	
	
	





```
barcode4j-2.1.0-bin.zip
```
 sind aber x Dateien und Ordner und keine jar, die einfach eingebunden wird.

AUßerdem hat's nicht funktioniert, weil (wie ich dann auf der HomePage gelesen habe) QR-Codes nicht integriert sind. Deshalb hab ich's nicht zum Laufen gebracht.

Mein Problem ist also noch nicht gelöst, nur verschoben.


----------



## Deros (23. Mai 2012)

hast du dir die vorherigen posts eigentlichen durchgelesen? wenn du die zip entpackst befindest sich im build-ordner mehrere jars darunter auch eine barcode4j.jar, wenn nicht hast du irgendwas falsches heruntergeladen. 

das im letzten release von barcode4j noch keine qr-codes drin sind steht auch schon auf der ersten seite und auch wie man es trotzdem mit barcode4j hinbekommen kann inkl. einem codebeispiel.


----------



## AquaBall (23. Mai 2012)

Ja, hab ich mir schon durchgelesen.
Aber die Posts hab ich erst so richtig verstanden, nachdem ich im Selbst-Versuch verstanden habe, was die Probleme sind.

Deine Hilfe war hat mir auch viel gebracht, will ich nochmal betonen.
QR geht halt so noch nicht (einfach).


----------



## Deros (23. Mai 2012)

darf man fragen woran du jetzt scheiterst?


----------



## AquaBall (23. Mai 2012)

An der Stelle, wo 
	
	
	
	





```
ZXing
```
 erfordert wird, ich aber keinen Punkt gefunden habe:
1) das DA runterladen
2) DIESE Jar einbinden
fertig.

Deshalb hab ich es im AUgenblick verschoben, weil ich noch viel anderes zu tun habe.


----------



## Deros (23. Mai 2012)

die jar liegt im lib verzeichnis im svn


----------



## AquaBall (23. Mai 2012)

Sorry, aber da bin ich echt noch zu hilflos.

Weder auf Apache-Subverse,
noch auf ZXing trunk ... 
find ich was brauchbares.
Ich finde dort auch nirgends ein 'lib' ...

Ich hab mir ZXing-2.0.zip runtergeladen, aber da ist überhaupt kein Jar enthalten. 

Noch fühl ich mich extrem orientierungslos.


----------



## Deros (23. Mai 2012)

SourceForge.net Repository - [barcode4j] Index of /barcode4j/lib


----------



## cjs1976 (23. Mai 2012)

Hallo AquaBall!

Für mich war das Ganze nur mal ein Vorabtest. Derzeit ist eine "wilde Lösung" (Mischung zwischen uralt ASP und PHP) per Web-API über Free QR Code API - generate QR Code graphics free of charge - QR-Server [QR Codes, QR Code, Software, SDK, Library, C++, PHP] im Einsatz. Funktioniert. Besser gefällt mir aber API - Esponce API v3.0 beta - Esponce - Turning things into hyperlinks, weil die EPS-Dateien (und mehr!) können. Speziell wenn Du den QR-Code anschließend per Zeichenprogramm (zB Adobe Illustrator) aufpeppen willst/musst. Beide sind soweit erst mal frei nutzbar, wenn ich das korrekt interpretiere.

Über die Google-Chart-API müsste es eigentlich auch gehen, hat aber bei uns nicht sauber geklappt (siehe https://developers.google.com/chart/infographics/docs/qr_codes?hl=de-DE).

Wenn Du das so nicht lösen willst/kannst, und wirklich eine eigenständige Software haben willst, dann würde ich über den Kauf einer Third-Party-API nachdenken. Mit barcode4j bin ich übrigens auch nicht gut klargekommen.

Zum Beispiel:

1. QR Code for the Java [TM] Platform -> ab EUR 55,00
2. Purchase BarcodeLib.com Products -> ab USD 550,00
3. Purchase OnBarcode Barcode Library & SDK Licenses Online - OnBarcode.com -> ab EUR 350,00

Hinweis: Habe für alle drei je ein NetBeans-Projekt wo ich es selber getestet habe. Wenn Du willst, kann ich Dir das zum Download zur Verfügung stellen, oder Dir eine E-Mail schicken. Ist aber wirklich nur für den Schnelltest!

ACHTUNG 1: Das sind nur die, die ich getestet habe. Jemand anders weiß vielleicht noch was Besseres. Du musst auch ganz genau sicherstellen, dass die jeweilige Lizenz das macht was Du willst (nämlich QR-Code unter Java)!

ACHTUNG 2: Die Größe und Qualität (am Besten ein Vektorgrafik) des QR-Codes ist extrem wichtig! Und die Unterstützung der deutschen Sonderzeichen solltest Du vorher auch immer testen. Kommt auch immer darauf an, was Du in den QR-Code packen willst... ;-)

Hoffe ich konnte Dir ein bisschen weiterhelfen!?

Gruß,
Christian.


----------



## AquaBall (23. Mai 2012)

Deros hat gesagt.:


> SourceForge.net Repository - [barcode4j] Index of /barcode4j/lib



Ich danke vielmals für deine Geduld, und deinen Service. Jetzt werden sogar direkte Links geliefert 

*Aber ich bring's einfach weiter.*
Aktueller Stand:
Ich hab mir barcode4j-2.1.0\ runtergeladen und 
	
	
	
	





```
barcode4j.jar
```
 in mein lib verschoben.
Habe nun mit deiner Hilfe 
	
	
	
	





```
zxing-core-1.7.jar
```
 gefunden; liegt jetzt auch in lib.
Projekt mit deinem Code ("_mir war langweilig_") angelegt und die Libs eingetragen.

Und hänge noch immer am selben Fehler:

```
import org.krysalis.barcode4j.impl.qr.*;
```
existiert nicht.
Und deshalb: 
	
	
	
	





```
QRCodeBean
```
 ist (logischerweise) undefiniert.
In ZXing sind zwar schon ein paar QRxxx-Klassen, mit denen komm ich aber nicht weiter.

Offensichtlich hab ich mich an etwas "noch zu großes" gewagt.

Kaufen will sicher ich noch nichts.

Dabei will ich doch nur eigene Strings per QR von einem Handy auf ein anderes übertragen. Sonst nichts!


----------



## turtle (23. Mai 2012)

Wenn Du noch interessiert bist, kann ich mal mein Testprogramm mit ZXing raussuchen und hier posten.

Ist aber ebenfalls nur wild zusammengebaut, nur um mal ZXing zu testen


----------



## AquaBall (23. Mai 2012)

Wäre sicher ne Hilfe.
Bitte gerne!


----------



## Deros (23. Mai 2012)

wie schon mehrfach gesagt musst du die aktuellen sourcen aus dem cvs auschecken und kompilieren, dazu steht ein ant script zur Verfügung. 

hast glück die jar ist klein genug so dass ich sie auch direkt hier einfügen kann viel spaß damit


----------



## AquaBall (23. Mai 2012)

_[STRIKE]Na, warum nicht gleich so![/STRIKE]_ 

Nein entschuldige! Jetzt will ich nicht frech werden, wo du mir so geduldig hilfst!

VIELEN DANK!:toll:



Ich wage gar nicht daran zu denken, ob ich irgendwann in der Lage sein werde, QRs auch einlesen zu können.


----------



## AquaBall (23. Mai 2012)

Deros hat gesagt.:


> wie schon mehrfach gesagt musst du die aktuellen sourcen aus dem cvs auschecken und kompilieren, dazu steht ein ant script zur Verfügung.



CVS? auschecken? Da hab ich keine Ahnung wovon du redest.

Liegt das vielleicht daran, dass ich für Android entwickle?
(Jetzt will ich dich aber nicht mehr nerven.)


----------



## Deros (23. Mai 2012)

nein das hat nix damit zu tun worauf deine anwendung nachher läuft sondern ist ein versionierungssystem einfach mal nach googlen, darf man als entwickler ruhig kennen


----------



## turtle (23. Mai 2012)

Ich habe den Test mit Zxing 1.5 gemacht.

Du benötigst folgende Source-Directories, die Du als weitere Ordner im Build-Path aufnimmst:

zxing-1.5/core/src
zxing-1.5/javase/src
Weierhin benötigst Du 

zxing-1.5/zxingorg/web/basis/BarcodeReader.jar
die Du als Library ebenfalls in den Build-Path aufnimmst.

Mein kleines Programm encodiert das Argument in ein Bild mit Namen des Arguments.png in 300x300 Pixel.


```
public class Encode {

	public static void main(String[] args) throws IOException {
		String data = new String(args[0]);

		// get a byte matrix for the data
		ByteMatrix matrix;
		com.google.zxing.Writer writer = new QRCodeWriter();
		try {
			matrix = writer.encode(data,
					com.google.zxing.BarcodeFormat.QR_CODE, 300, 300);
		} catch (com.google.zxing.WriterException e) {
			return;
		}

		// generate an image from the byte matrix
		int width = matrix.getWidth();
		int height = matrix.getHeight();

		byte[][] array = matrix.getArray();

		// create buffered image to draw to
		BufferedImage image = new BufferedImage(width, height,
				BufferedImage.TYPE_INT_RGB);

		// iterate through the matrix and draw the pixels to the image
		for (int y = 0; y < height; y++) {
			for (int x = 0; x < width; x++) {
				int grayValue = array[y][x] & 0xff;
				image.setRGB(x, y, (grayValue == 0 ? 0 : 0xFFFFFF));
			}
		}

		// write the image to the output stream
		FileOutputStream outputStream = new FileOutputStream(new File(args[0]
				+ ".png"));
		ImageIO.write(image, "png", outputStream);
	}

}
```
Zum Dekodieren iteriert das folgende Programm über alle png-Bilder und gibt den codierten Text aus.

```
public class Decode {


	public static void main(String[] args) throws NotFoundException,
			ChecksumException, FormatException, IOException, WriterException {
		Reader reader = new MultiFormatReader();
		File dir = new File(args[0]);
		FileListFilter pngFilter = new FileListFilter("", "png");
		String[] list = dir.list(pngFilter);
		for (String fName : list) {
			BufferedImage myImage = ImageIO.read(new File(fName));
			LuminanceSource source = new BufferedImageLuminanceSource(myImage);
			BinaryBitmap bitmap = new BinaryBitmap(new HybridBinarizer(source));
			Result result = reader.decode(bitmap);
			String text = result.getText();
			System.out.println(fName+":"+text);
		}
		
	}

}

class FileListFilter implements FilenameFilter {
	private String name;

	private String extension;

	public FileListFilter(String name, String extension) {
		this.name = name;
		this.extension = extension;
	}

	public boolean accept(File directory, String filename) {
		boolean fileOK = true;

		if (name != null) {
			fileOK &= filename.startsWith(name);
		}

		if (extension != null) {
			fileOK &= filename.endsWith('.' + extension);
		}
		return fileOK;
	}
}
```


----------



## AquaBall (23. Mai 2012)

Cool!

Danke! 

(Einbauen kann ich es erst in den nächsten Tagen.)


----------



## AquaBall (23. Mai 2012)

Vielen Dank. Es läuft schon mal.

Hab's auf 2 Routinen (lesen/schreiben) umgebaut und funktioniert fast einwandfrei.

Aber 1 SEHR seltsamer Fehler passiert.
Wenn ich genau einen bestimmten Text angebe, dann mach er zwar ein gültiges QR,
(dieses QR kann ich auch mit meinem Handy lesen, ist also - an sich - korrekt,)
aber deine LeseRoutine ergibt NUR BEI EXAKT DIESEM TEXT eine Fehler:

```
"In diesem QR-Codes steht:           Sarah, ich hab dich Lieb!"
```
(mit 11 Leerzeichen dazwischen) 


```
System.out.println("Breite: "+bitmap.getWidth());  // ergibt 300, also ok!
Result result = reader.decode(bitmap);
: com.google.zxing.NotFoundException
```

*Sobald ich auch nur 1 Zeichen ändere, erkennt es die Leseroutine wieder problemlos!?!*
(z.B. das große 'L' gegen ein kleines 'l' korrigieren.)
Hab ich zufällig den GeheimCode geknackt?

Kannst du diesen Fehler bei die nachvollziehen und finden?


----------

