c# - thoughtworks - qrcode.net example
código de muestra para detectar QRCode en una imagen (3)
Uso este código en C # para decodificar (no detectar) un QRCode y funciona:
LuminanceSource ls = new RGBLuminanceSource(image, image.Width, image.Height);
Result result = new QRCodeReader().decode(new BinaryBitmap(new HybridBinarizer(ls)));
Ahora me gustaría detectar un código QR en una imagen más compleja con muchas otras cosas, como imágenes y texto. No puedo entender cómo lograr esto porque no puedo encontrar ninguna muestra y la transformación de Bitmap (C #) a Bitmatrix para Detector (zxing) no es tan directa.
¿Alguien tiene un pedazo de código para darme?
muchas gracias
ACTUALIZAR
Intento este código pero obtengo una ReaderException:
El código:
LuminanceSource ls = new RGBLuminanceSource(bitmap, bitmap.Width, bitmap.Height);
QRCodeMultiReader multiReader = new QRCodeMultiReader();
Result[] rs = multiReader.decodeMultiple(new BinaryBitmap(new HybridBinarizer(ls)), hints);
return rs[0].Text;
La excepción
com.google.zxing.ReaderException:
in com.google.zxing.qrcode.detector.FinderPatternFinder.selectBestPatterns()
in com.google.zxing.qrcode.detector.FinderPatternFinder.find(Hashtable hints)
in com.google.zxing.qrcode.detector.Detector.detect(Hashtable hints)
in com.google.zxing.qrcode.QRCodeReader.decode(BinaryBitmap image, Hashtable hints)
in com.google.zxing.qrcode.QRCodeReader.decode(BinaryBitmap image)
in ...Logic.BarCodeManager.QRCodeReader(Bitmap bitmap) in
ACTUALIZACIÓN 02/12/2011
¡Acabo de intentar escanear el QRCode impreso (con la parte del código en la parte superior de la publicación) con una aplicación en mi iPhone y funciona bien! Así que el problema está seguramente en la fase de detección / decodificación.
Aunque es viejo. Todavía quiero publicarlo en caso de que alguien lo necesite. El ruido de las imágenes hace que para zxing sea difícil detectar códigos qr. Los resultados son mucho mejores si las imágenes están libres de ruido. Utilizo un método simple para reducir el ruido de las imágenes escaneadas. Se puede hacer encogiendo la imagen. El factor de contracción puede variar según el ruido de las imágenes. Encontré que el factor 3 funciona bien en mi caso.
Los códigos QR siempre tienen los tres cuadrados en las esquinas superior izquierda, superior derecha e inferior izquierda. Sabiendo esto, debería poder buscar ese patrón cuadrado dentro de los datos de píxeles de la imagen que está analizando, para averiguar la parte superior izquierda, el ancho y la altura del código qr con un poco de análisis lógico simple.
private string Qrreader(Bitmap x)
{
BarcodeReader reader = new BarcodeReader { AutoRotate = true, TryHarder = true };
Result result = reader.Decode(x);
string decoded = result.ToString().Trim();
return decoded;
}
¡funciona para mi! TryHarder lo hace buscar en la imagen completa.