Gma.QrCodeNet.Encoding.dll

Deutschsprachiges X#-Forum – German language forum

Moderator: wriedmann

Post Reply
lagraf
Posts: 450
Joined: Thu Jan 18, 2018 9:03 am
Location: A

Gma.QrCodeNet.Encoding.dll

Post by lagraf »

Ich würde gerne mal probieren, einen QR Code mit X# und der Gma.QrCodeNet.Encoding.dll zu erstellen und zu speichern.
Dazu gibt es im Internet C# Beispiele, z.B.:

Code: Select all

    using System;
    using System.Collections.Generic;
    using System.Diagnostics;
    using System.Drawing;
    using System.Drawing.Imaging;
    using System.IO;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    using Gma.QrCodeNet.Encoding;
    using Gma.QrCodeNet.Encoding.Windows.Controls;
...
     QrEncoder encoder = new QrEncoder(ErrorCorrectionLevel.H);
     QrCode code = encoder.Encode(encodeString);
     Renderer renderer = new Renderer(25, System.Drawing.Brushes.Black, System.Drawing.Brushes.White);
     renderer.CreateImageFile(code.Matrix, IMAGE_NAME, ImageFormat.Png);
Kann man den Code auch mit X# abbilden, was ist eigentlich der Renderer?
User avatar
wriedmann
Posts: 3754
Joined: Mon Nov 02, 2015 5:07 pm
Location: Italy

Gma.QrCodeNet.Encoding.dll

Post by wriedmann »

Hallo Franz,
ich sehe keinen Grund, warum man das mit X# nicht können sollte.
Die entsprechende Zeile würde in X# so ausschauen:

Code: Select all

oRenderer := Renderer{ 25, System.Drawing.Brushes.Black, System.Drawing.Brushes.White } as Renderer
Woher die Klasse Renderer stammt, kann ich Dir so nicht sagen, ohne die DLL wirklich zu holen und zu versuchen, das umzusetzen.
Wolfgang
Wolfgang Riedmann
Meran, South Tyrol, Italy
wolfgang@riedmann.it
https://www.riedmann.it - https://docs.xsharp.it
ic2
Posts: 1858
Joined: Sun Feb 28, 2016 11:30 pm
Location: Holland

Gma.QrCodeNet.Encoding.dll

Post by ic2 »

Hallo Franz,

Ich denke, der Originalcode ist von https://archive.codeplex.com/?p=qrcodenet und ist auf https://github.com/lianggx/QrCode.Net

Über das Rendern: Rendern einer QR-Code-Bitmatrix auf den Bildschirm, in eine Bilddatei oder einen Stream.

Wenn Sie das Github-Beispiel haben kann mit ILSpy eine ziemlich genaue Übersetzung in X# gemacht werden.

So funktioniert es:

https://www.xsharp.eu/forum/welcome/261 ... -wia#19217

============================================================
English
I think the original code comes from https://archive.codeplex.com/?p=qrcodenet and it's forked on https://github.com/lianggx/QrCode.Net.

About rendering this site says: Rendering of QR code bit matrix to screen, into an image file or stream.

If you have the Github sample and let ILSpy point to the exe you will get a pretty accurate translation to X#. Here is how it works:

https://www.xsharp.eu/forum/welcome/261 ... -wia#19217


Dick
lagraf
Posts: 450
Joined: Thu Jan 18, 2018 9:03 am
Location: A

Gma.QrCodeNet.Encoding.dll

Post by lagraf »

Endlich komme ich mal wieder dazu, beim QRCode weiterzumachen!

Ich möchte die Gma.QrCodeNet.Encoding.dll dazu verwenden, einen QR-Code zu generieren und als File zu speichern. Dazu habe ich eine Methode in X# erstellt:

Code: Select all

LOCAL oRenderer as Renderer
LOCAL oEncode as QREncode
LOCAL code as QrCode

USING System
USING System.Collections.Generic
USING System.Diagnostics
USING System.Drawing
USING System.Drawing.Imaging
USING System.IO
USING System.Linq
USING System.Text
USING System.Windows.Forms
USING Gma.QrCodeNet.Encoding
USING Gma.QrCodeNet.Encoding.Windows.Controls

oEncoder := QrEncoder{ErrorCorrectionLevel.H}
code := oEncoder.Encode("Dies sollte ein QR-CODE sein")
oRenderer := Renderer{ 25, System.Drawing.Brushes.Black, System.Drawing.Brushes.White }
oRenderer.CreateImageFile(code.Matrix, "TESTQR.PNG", ImageFormat.Png)
Dabei bekomme ich aber die Fehler:
error XS9002 Parser: unexpected input "Gma"
error XS9002 Parser: unexpected input "System"

Die DLL liegt im App Ordner, wie mache ich sie dem Prog bekannt?
Die System Angaben sind wahrscheinlich aus .NET, wie findet X# diese?

Frage an Robert: Wie wäre es mit einem C# Translator, damit hätte man eine riesige Bibliothek an Bausteinen zur Verfügung?
User avatar
Chris
Posts: 4898
Joined: Thu Oct 08, 2015 7:48 am
Location: Greece

Gma.QrCodeNet.Encoding.dll

Post by Chris »

Hi Franz,

You need to put the USING statements in the beginning of the file.

About a c# translator, you can use ILSpy, with Fabrice's plugin which generates X# output: https://www.xsharp.eu/itm-downloads?fol ... %252FTools

.
Chris Pyrgas

XSharp Development Team
chris(at)xsharp.eu
User avatar
wriedmann
Posts: 3754
Joined: Mon Nov 02, 2015 5:07 pm
Location: Italy

Gma.QrCodeNet.Encoding.dll

Post by wriedmann »

Hallo Franz,
wenn Du die XIDE verwendest: unter den References einbinden. Dann wird die DLL alleine ins Bin-Verzeichnis kopiert.
Ohne diese Angabe wird die DLL nicht verwendet - wie denn auch.

Und wegen C#-Translator: so was gibt es schon.
Wenn Du dem C#-Code kompiliert vorliegen hast, kannst Du Dir den Quellcode mit ILSpy anschauen, und das Plugin vom Fabrice zeigt ihn Dir in X#-Syntax an.

Wolfgang
Wolfgang Riedmann
Meran, South Tyrol, Italy
wolfgang@riedmann.it
https://www.riedmann.it - https://docs.xsharp.it
lagraf
Posts: 450
Joined: Thu Jan 18, 2018 9:03 am
Location: A

Gma.QrCodeNet.Encoding.dll

Post by lagraf »

Ich habe die Gma.QrCodeNet.Encoding.dll unter References eingetragen und die USING Statements vor die Start Function gelegt. Beim Compilieren erhalte ich dann die Meldung

error XS0234: The type or namespace name 'Controls' does not exist in the namespace 'Gma.QrCodeNet.Encoding.Windows' (are you missing an assembly reference?)

Ist der Eintrag nicht Bestandteil des Gma.QrCodeNet.Encoding, ich habe ja nur die Gma.QrCodeNet.Encoding.dll? Weglassen kann ich die USING davon nicht, da sonst Renderer, QREncode, QRCode nicht erkannt werden.
lagraf
Posts: 450
Joined: Thu Jan 18, 2018 9:03 am
Location: A

Gma.QrCodeNet.Encoding.dll

Post by lagraf »

Hi Chris
I've already installed ILSpy 2.3.1.1855, do I need a newer version? What do I need from the ILSpy Dlls on your page? How do I integrate that Dll into ILSpy? What's the diff between
- ILSpy502.XSharpLanguage.Plugin.dll.zip
- ILSpy 5.02 plugin
- ILSpy 5 plugin
I've a C# Dll which uses Gma.Qr.CodeNet.Encoding.dll to generate and save QRCodes, but it does many other things I do not need, so I only would like to extract the QRCode calls.
User avatar
wriedmann
Posts: 3754
Joined: Mon Nov 02, 2015 5:07 pm
Location: Italy

Gma.QrCodeNet.Encoding.dll

Post by wriedmann »

Hallo Karl,
leider kenne ich diese DLL nicht.
Wenn ein Namespace nicht enthalten ist, dann sind auch die darunter enthaltenen Klassen nicht in der DLL.
Kann es sein, daß Du den Namespace falsch geschrieben hast?
Normalerweise kannst Du mit dem ILSpy schauen, was in Deiner DLL alles drinnen ist.
Ich kann Dir da leider nicht weiterhelfen, da ich diese DLL nicht kenne und nicht weiß, was wo drinnen ist.
Wolfgang
Wolfgang Riedmann
Meran, South Tyrol, Italy
wolfgang@riedmann.it
https://www.riedmann.it - https://docs.xsharp.it
lagraf
Posts: 450
Joined: Thu Jan 18, 2018 9:03 am
Location: A

Gma.QrCodeNet.Encoding.dll

Post by lagraf »

Hallo Wolfgang,
anscheinend paßt dann das C# Codebeispiel nicht zu meiner Gma.QrCodeNet.Encoding.dll. Wenn ich diese mit ILSpy betrachte, finde ich kein ..Windows.Controls aber dafür ein ..Windows.Render. Dafür gibt es auch C# Codebeispiele:

Code: Select all

QrEncoder qrEncoder = new QrEncoder(ErrorCorrectionLevel.H);
QrCode qrCode = qrEncoder.Encode("Hello World!");
GraphicsRenderer renderer = new GraphicsRenderer(new FixedModuleSize(5, QuietZoneModules.Two), Brushes.Black, Brushes.White);
using (FileStream stream = new FileStream(@"c:tempHelloWorld.png", FileMode.Create))
            {
                renderer.WriteToStream(qrCode.Matrix, ImageFormat.Png, stream);
            }
Die ersten Zeilen würde ich so übersetzen:

Code: Select all

LOCAL qrEncoder AS QREncoder
LOCAL qrCode AS QrCode
LOCAL renderer AS GraphicsRenderer
LOCAL fms AS FixedModuleSize
	
qrEncoder := QrEncoder{ErrorCorrectionLevel.H}
qrCode := qrEncoder.Encode("Hello World!")
renderer := GraphicsRenderer(fms := FixedModuleSize(5, QuietZoneModules.Two), System.Drawing.Brushes.Black, System.Drawing.Brushes.White)
Aber was macht das using in den letzten Zeilen und wie schaut das in X# aus?
Post Reply