Ich versuche, einen QR-Code aus einer .png-Datei zu importieren und dekodieren Zxing.Mobile.net mit (https://www.nuget.org/packages/ZXing.Net.Mobile/ und https://www.nuget.org/packages/ZXing.Net.Mobile.Forms).Lese QR-Code in Xamarin Forms Mit ZXing
Wenn ich den QR-Code mit der Klasse ZXing.Mobile.MobileBarcodeScanner
scanne, funktioniert die Decodierung wie erforderlich, beim Importieren aus einer Datei gibt die Qr-Code-Lesefunktion (ZXing.QrCode.QRCodeReader()
) immer Null zurück.
Da ich Xamarin Formen verwende, behandelt jede Plattform die Bitmap/Image-Erstellung und der Portable-Teil den Rest (Zxing BinaryBitmap Erstellung und Dekodierung).
//Store rawBytes and image demensions
PotableBitmap bMap = DependencyService.Get<IBitmap>().FileToBitmap(filePath);
RGBLuminanceSource source = new RGBLuminanceSource(bMap.RgbBytes, bMap.Width, bMap.Height, RGBLuminanceSource.BitmapFormat.RGB32);
HybridBinarizer binarized = new HybridBinarizer(source);
BinaryBitmap bitmap = new BinaryBitmap(binarized);
var reader = new ZXing.QrCode.QRCodeReader();
data = reader.decode(qrCodeBitmap); // This is always null
Die DependencyService die plattformspezifische Funktion, im Moment so arbeite ich mit Andorid nennen, wird die Funktion wie folgt:
public PortableBitmap FileToBitmap(string ms)
{
var bytes = File.ReadAllBytes(ms);
Android.Graphics.Bitmap bMap = BitmapFactory.DecodeByteArray(bytes, 0, bytes.Length);
int[] intArray = new int[bMap.Width * bMap.Height];
bMap.GetPixels(intArray, 0, bMap.Width, 0, 0, bMap.Width, bMap.Height)
List<byte> result = new List<byte>();
foreach (int intRgb in intArray)
{
Color pixelColor = new Color(intRgb);
result.Add(pixelColor.R);
result.Add(pixelColor.G);
result.Add(pixelColor.B);
}
return new PortableBitmap(result.ToArray(), bMap.Width, bMap.Height);
}
ich einige der Beiträge SO ausgesehen haben auf die das gleiche Problem haben und haben folgendes versucht:
- mit BitmapLuminanceSource: Noch gibt null zurück und erfordert die Verwendung einer anderen Bibliothek
- Verwendung verschiedener Bitmap-Formate für die RGBLuminanceSource: RGB32, BGR32, ARGB32, ABGR32 (jedesmal, wenn die FileToBitmap Funktion zu ändern)
- Versuchte die verschiedenen Digitalisierer,
GlobalHistogramBinarizer()
- geprüft, ob die Datei durch Lesen und wrinting es richtig gelesen wird zurück zu einer Datei.
- ich versucht habe, die
MultiFormatReader()
mit dem reinen Barcode und versuchen Sie härter Hinweise - Ich habe gedebuggt auch die Code-Bibliotheken Quelle und von dem, was ich verstehe es einfach nicht den QR-Code in dem importierten Bild finden. Es wird keine Ausnahme ausgelöst.
Hier ist, wo die Rückkehr null gemacht wird:
private FinderPattern[] selectBestPatterns()
{
int startSize = possibleCenters.Count;
if (startSize < 3)
{
// Couldn't find enough finder patterns
return null; // It returns here
}
...
Der Online ZXing Decoder (https://zxing.org/w/decode.jspx) den QR-Code entschlüsseln kann ich richtig testen bin. Hier ist mein Test QR-Code:
Eine Java-Lösung zu Ihrer Frage, kann es Ihnen helfen, den richtigen Weg, https://stackoverflow.com/questions/3422651/decoding-qr-code-from-image-stored-on-the-phone -mit-zxing-on-android-phone – Kevin
Vielen Dank für den Link, aber ich habe diese Lösung bereits ohne Erfolg versucht – PMARSH