QRCoder – eine Open Source QR-Code Implementierung in C#

QRCoder DemoQR-Codes dürfte mittlerweile so ziemlich jeder kennen. Seitdem Smartphones immer populärer werden, finden auch QR-Codes immer mehr den Einzug in unser Alltagsleben. Grund genug, um sich als interessierter Informatiker einmal näher mit der Technik dahinter zu beschäftigen. Und was liegt da näher, als selber einmal einen QR-Code-Generator zu implementieren?

Da C# die Programmiersprache ist, in der ich mich am besten zurecht finde, fiel die Wahl dementsprechend auf  diese Sprache. Informationen zum QR-Code sind wiederum gar nicht so leicht zu bekommen. Am einfachsten wäre es natürlich die entsprechende ISO/IEC Norm zu Rate zu ziehen. Das wäre die ISO/IEC 18004. Mit rund 170€, die die ISO dafür haben will, ist diese mir für ein Non-Profit-Hobbyprojekt jedoch etwas zu teuer.

Wie funktionieren QR-Codes (technisch)?

Zum Glück gibt es im Netz zwei, drei wirklich gute Quellen, die die Funktionsweise eines QR-Code-Generators erklären. Mit Hilfe dieser Seiten, habe ich mich an meine eigene Implementierung gemacht. Für alle die sich in das Thema einlesen wollen, nachfolgend einmal meine Hauptquellen:

Da die komplette Logik zur Generierung doch etwas komplizierter ist und den Rahmen dieses Posts bei weitem sprengen würde, werde ich diese hier nicht weiter erläutern. Wer mag, kann sich auf den oben verlinkten Seiten einlesen und bei Fragen natürlich gerne einen Kommentar schreiben. Ich werde dann so gut es geht Rede und Antwort stehen.

Benötigen Sie Hilfe bei der Implementierung? Suchen Sie nach einer Individuallösung? Brauchen Sie runde, transparente oder besonders gestaltete QR-Codes? Dann kontaktieren Sie mich.

Ich habe bereits einige QR-Code-Individuallösungen für Kunden verschiedener Branchen umgesetzt. Warum also nicht auch für Sie?

Nachfolgend soll es mehr um die Verwendung meiner QR-Code Library gehen. Also wie sie zu benutzen ist, wo ihr sie herbekommt und unter welcher Lizenz sie steht.

Woher bekomme ich QRCoder?

Den Quellcode des QRCoder, so habe ich meinen QR-Code Generator genannt, bekommt ihr auf GitHub. Der Code steht unter der MIT-Lizenz und kann somit also gerne in nicht-kommerziellen als auch in kommerziellen Projekten verwendet werden.

github logo
QRCoder @ Github

Solltet ihr die Library für eines eurer Projekte verwenden, würde ich mich trotzdem freuen, wenn ihr einen kurzen Kommentar hinterlassen würdet. (Man freut sich ja immer zu sehen, was aus seinen “Babys” wird.)

Wie verwende ich QRCoder?

Die Verwendung des QRCoders gestaltet sich relativ einfach. Zuerst müsst ihr natürlich eine Referenz auf die QRCoder.dll hinzufügen.

Um einen QR-Code zu erstellen und anzuzeigen reichen im Endeffekt 4 Zeilen Code aus.

private void renderQRCode()
{
   QRCodeGenerator qrGenerator = new QRCodeGenerator();
   QRCodeData qrCodeData = qrGenerator.CreateQrCode("The text which should be encoded.", QRCodeGenerator.ECCLevel.Q);
   QRCode qrCode = new QRCode(qrCodeData);
   Bitmap qrCodeImage = qrCode.GetGraphic(20);
}

In der ersten Zeile wird der QR-Code Generator instanziiert, in der zweiten Zeile wird eine QR-CodeData Objekt erstellt, in der dritten Zeile wird der QR-Code-Objekt erstellet, welches in der vierten Zeile dann als Bitmap-Grafik gerendert und in einer PictureBox angezeigt. Mehr ist nicht nötig, um einen QR-Code zu erstellen und anzuzeigen.

Die passende Fehlerkorrektur

Die Funktion CreateQrCode() nimmt neben der Zeichenkette, die im QR-Code kodiert werden soll auch noch das Fehlerkorrekturlevel (ECCLevel) an. Hierbei stehen die Level L (7%), M (15%), Q (25%) und H (30%) zur Verfügung, wobei die Prozentzahl angibt, wie viel Prozent des QR-Code maximal verdeckt/zerstört sein dürfen, damit dieser trotzdem mittels der Fehlerkorrektur noch erfolgreich ausgelesen werden kann.

Kreativ sein – QR-Codes selber rendern

Wie im obigen Beispiel gezeigt, kann man mittels der GetGraphic() Funktion als Bitmap rendern lassen. Hierbei wird ein klassicher schwarz-weißer QR-Code erstellt. Wer es lieber bunt hat, oder statt viereckigen Teilblöcken Punkte haben möchte, kann sich die Eigenschaft ModuleMatrix des QR-Code Objekts zu nutze machen. Diese enthält Für jede Zeile und Spalte des QR-Codes die Information, ob der Teilblock schwarz oder weiß sein muss. Mit Hilfe diese Information kann man sich nun eine eigene Methode zum rendern schreiben.

//List<System.Collections.BitArray> ModuleMatrix

foreach (System.Collections.BitArray line in qrCode.ModuleMatrix)
{
    foreach (bool block in line)
    {
        //Platz für eure eigene Render-Funktion
        //Wenn block==true dann dunkel, sonst hell rendern
    }
}

Feedback, Kritik und Pläne

Solltet ihr (konstruktives) Feedback, Anregungen, Fragen, Tipps, Sorgen oder Probleme mit der Library haben, dann schreibt mir einfach einen Kommentar. Auch über Forks auf GitHub freue ich mich immer.

Wie es mit Library weiter geht, ist noch nicht ganz klar, da mir momentan die Zeit fehlt. Ideen habe ich jedoch noch einige. So möchte ich gerne noch weitere Methoden zum Rendering einbauen, um QR-Codes noch auf andere Weisen darstellen zu können. Auch kann ich ich mir vorstellen, direkt Funktionen bereitzustellen um QR-Codes mit Inhalten eines bestimmten Formats zu erstellen, wie z.B. QR-Codes die Telefonnummern oder WLAN-Zugangsdaten enthalten. Das ist nun umgesetzt. Mittels der Klasse PayloadGenerator können auch WiFi- und andere QR-Codes erstellt werden.

Für all das brauche ich jedoch erst einmal die Zeit. Falls jemand Lust hat und sich selber dran macht, lässt sich die Library ja vielleicht auch im Team erweitern.

So weit, so gut! Ich wünsche viel Spaß mit der QRCoder Library.

AvatarÜber den Autor: Dieser Artikel, sowie 368 andere Artikel auf code-bude.net, wurden von Raffael geschrieben. – Seit 2011 blogge ich hier über Programmierung, meine Software, schreibe Tutorials und versuche mein Wissen, so gut es geht, mit meinen Lesern zu teilen. Zudem schreibe ich auf derwirtschaftsinformatiker.de über Themen meines Studiums.  //    •  • Facebook  • Twitter


70 Kommentare

  1. QR coder zu programmieren ist keine einfache Sache

  2. Avatar
    Martinsays:

    Hi Raffael,

    Ich scheitere leider kläglich darin Dein Project zu laden (VS2015). Welche IDE benötige ich?
    Oder gibt es einen Trick den ich nicht kenne?
    Danke für Hilfe
    Martin

  3. whdsjcabxkapsiqxjjwotooiuhnixa

  4. opdipkozdlrjdyldlcbtwewjnfltfv

  5. hdhrivmzhoofzepiufhkmtowbozisw

  6. oopdjxpjdfyvqyngpadbhwpyngqnfu

Hinterlasse einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Sie dient nur dem Spamschutz.