Как использовать порт ZXing C # - PullRequest
8 голосов
/ 01 ноября 2009

ПРИМЕЧАНИЕ: Мой оригинальный вопрос был о том, надежен ли порт ZXing C #, но здесь я пытаюсь выяснить, как его использовать. Таким образом, они не являются дубликатами.

Я пытаюсь использовать модуль ZXing C #, но у меня проблемы. Кто-нибудь, кто раньше использовал ZXing, знает, как это сделать правильно? К сожалению, документация на C # довольно мала.

Мой текущий код:

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

Я получаю исключение в строке, которая начинается с "Result result = ..." ReaderException заявляет: "Unable to cast object of type 'com.google.zxing.oned.MultiFormatOneDReader' to type 'com.google.zxing.Reader'.

Итак, что я делаю не так?

ОБНОВЛЕНИЕ: Я собираюсь попробовать предложенные идеи, но пока я обнаружил этот выпуск в группе ZXing.

Ответы [ 3 ]

11 голосов
/ 01 сентября 2011

Это образец для создания QRCode.

        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:srowen@example.com;; ", 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);

См. Формат штрих-кода на http://code.google.com/p/zxing/wiki/BarcodeContents

2 голосов
/ 01 ноября 2009

Я думаю, что это должно быть недостатком порта, поскольку в исходной Java эти классы совместимы с приведением типов. Возможно, просто используйте MultiFormatOneDReader в качестве ссылочного типа в коде, а не Reader, хотя строка должна быть в порядке как есть. Если вы исправите источник и хотите отправить изменения, сообщите нам (проекту).

1 голос
/ 01 ноября 2009

Я подозреваю, что вы просто пропустили приведение / используете неправильный тип, попробуйте изменить

Result result = reader.decode(image);

строка в один из следующих

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

или, возможно,

MultiFormatOneDResult result = reader.decode(image);

Боюсь, что сейчас у меня нет доступа к компилятору c #, поэтому я не могу это проверить - поэтому я прошу прощения, если я не в порядке!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...