2009-10-31 17 views
8

UWAGA: My original question było o tym, czy port ZXing C# jest niezawodny, ale tutaj, staram się dowiedzieć, jak z niego korzystać. Tak więc nie są one duplikatami.Jak używać ZXing C# Port

Próbuję użyć modułu C# ZXing, ale mam problem. Czy ktokolwiek, kto używał ZXing wcześniej wiedział, jak to zrobić poprawnie? Niestety dokumentacja C# jest dość mała.

Mój obecny kod jest:

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(); 

Dostaję wyjątek na linię, która zaczyna się od "wyniku result = ..." The ReaderException stwierdza: "Unable to cast object of type 'com.google.zxing.oned.MultiFormatOneDReader' to type 'com.google.zxing.Reader'.

Więc, co ja robić źle?

UPDATE: mam zamiar wypróbować proponowane pomysły, ale w międzyczasie znalazłem ten issue w grupie ZXing.

Odpowiedz

1

Podejrzewam, że są po prostu brakuje odlew/używasz niewłaściwego typu, spróbuj zmienić

Result result = reader.decode(image); 

linię do jednego z następujących

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

ewentualnie

MultiFormatOneDResult result = reader.decode(image); 

Obawiam się, że nie mam teraz dostępu do kompilatora AC#, więc nie mogę tego zweryfikować - więc przepraszam, jeśli jestem daleko od znak!

2

Myślę, że to musi być niedobór portu, ponieważ w oryginalnej Javie te klasy są zgodne z klasą. Być może po prostu użyj MultiFormatOneDReader jako typu odniesienia w kodzie, a nie w Czytniku, chociaż linia powinna być w porządku tak jak jest. Jeśli w inny sposób naprawisz źródło i chcesz przesłać zmianę, daj nam znać (projekt).

11

To jest próbka do wygenerowania kodu 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); 

Zobacz format kodów kreskowych w http://code.google.com/p/zxing/wiki/BarcodeContents

+0

pytanie jest o czytanie kodów kreskowych, a nie ich tworzenia, więc zły temat, ale ładne odpowiedź :) – Sam