2009-10-31 13 views
8

NOTA: My original question indicava se la porta ZXing C# è affidabile, ma qui, sto cercando di capire come usarla. Quindi, non sono duplicati.Come utilizzare la porta ZXing C#

Sto provando a utilizzare il modulo C# ZXing, ma ho problemi. Qualcuno che ha usato ZXing prima sa come farlo correttamente? Sfortunatamente, la documentazione di C# è piuttosto piccola.

mio codice attuale è:

using com.google.zxing; 
using com.google.zxing.client.j2se; 
using com.google.zxing.common; 

//... 

Reader reader = new MultiFormatReader(); 
MonochromeBitmapSource image = new BufferedImageMonochromeBitmapSource(new Bitmap(Image.FromFile("barcode.jpg")),false); 

Result result = reader.decode(image); 
string text = result.getText(); 
sbyte[] rawbytes = result.getRawBytes(); 
BarcodeFormat format = result.getBarcodeFormat(); 
ResultPoint[] points = result.getResultPoints(); 
Console.WriteLine("barcode text: {0}", text); 
Console.WriteLine("raw bytes: {0}", rawbytes); 
Console.WriteLine("format: {0}", format); 
Console.ReadLine(); 

sto diventando un'eccezione sulla riga che inizia con "risultato Risultato = ..." Il ReaderException afferma: "Unable to cast object of type 'com.google.zxing.oned.MultiFormatOneDReader' to type 'com.google.zxing.Reader'.

Allora, che cosa sono io fare male?

UPDATE: Ho intenzione di provare le idee suggerite, ma nel frattempo ho trovato questo issue nel gruppo ZXing.

risposta

1

ho il sospetto si sta solo perdendo un cast/stanno usando il tipo sbagliato, provare a cambiare

Result result = reader.decode(image); 

linea per uno dei seguenti

Result result = (Result)reader.decode(image); 

o forse

MultiFormatOneDResult result = reader.decode(image); 

Al momento non riesco ad accedere al compilatore di AC#, quindi non posso verificarlo, quindi mi scuso se sono lontano dal marchio!

2

Penso che dev'essere un difetto nella porta, poiché nel Java originale queste classi sono compatibili con il cast. Forse basta usare MultiFormatOneDReader come tipo di riferimento nel codice piuttosto che Reader, anche se la linea avrebbe dovuto essere valida così com'è. Se invece aggiusti la fonte e vuoi inviare la modifica, lasciaci sapere (il progetto).

11

Questo è un esempio per generare un codice QR.

 QRCodeWriter writer = new QRCodeWriter(); 
     com.google.zxing.common.ByteMatrix matrix; 

     int size = 180; 
     matrix = writer.encode("MECARD:N:Owen,Sean;ADR:76 9th Avenue, 4th Floor, New York, NY 10011;TEL:+12125551212;EMAIL:[email protected];; ", BarcodeFormat.QR_CODE, size, size, null); 


     Bitmap img = new Bitmap(size, size); 
     Color Color = Color.FromArgb(0, 0, 0); 

     for (int y = 0; y < matrix.Height; ++y) 
     { 
      for (int x = 0; x < matrix.Width; ++x) 
      { 
       Color pixelColor = img.GetPixel(x, y); 

       //Find the colour of the dot 
       if (matrix.get_Renamed(x, y) == -1) 
       { 
        img.SetPixel(x, y, Color.White); 
       } 
       else 
       { 
        img.SetPixel(x, y, Color.Black); 
       } 
      } 
     } 


     img.Save(@"c:\test.bmp",ImageFormat.Bmp); 

vedere il formato del codice a barre a http://code.google.com/p/zxing/wiki/BarcodeContents

+0

La domanda è sulla lettura dei codici a barre, non crearli, argomento in modo sbagliato, ma la risposta bello :) – Sam

Problemi correlati