Hier ist meine Lösung. Ich musste das Bild verkleinern und in den Farben, damit es mit Zxing funktioniert. Ich könnte einen Konvertiten hinzufügen in Graustufen, aber nicht heute ..
public static String scanDataMatrixImage(Bitmap bitmap) {
bitmap = doInvert(bitmap);
double scaling = getScaling(bitmap);
Bitmap resized;
if(scaling>0) {
resized = Bitmap.createScaledBitmap(bitmap, (int) (bitmap.getWidth() * scaling), (int) (bitmap.getHeight() * scaling), true);
}
else{
resized = bitmap;
}
String contents = null;
int[] intArray = new int[resized.getWidth() * resized.getHeight()];
//copy pixel data from the Bitmap into the 'intArray' array
resized.getPixels(intArray, 0, resized.getWidth(), 0, 0, resized.getWidth(), resized.getHeight());
LuminanceSource source = new RGBLuminanceSource(resized.getWidth(), resized.getHeight(), intArray);
BinaryBitmap binaryBitmap = new BinaryBitmap(new HybridBinarizer(source));
MultiFormatReader reader = new MultiFormatReader();
try
{
Result result = reader.decode(binaryBitmap);
contents = result.getText();
} catch (
Exception e
)
{
Log.e("QrTest", "Error decoding barcode", e);
}
return contents;
}
private static double getScaling(Bitmap bitmap){
int width = bitmap.getWidth();
int height = bitmap.getHeight();
int smallest = width;
if(smallest > height){
smallest = height;
}
double ratio = 200.0/smallest;
return ratio;
}
public static Bitmap doInvert(Bitmap src) {
// create new bitmap with the same settings as source bitmap
Bitmap bmOut = Bitmap.createBitmap(src.getWidth(), src.getHeight(), src.getConfig());
// color info
int A, R, G, B;
int pixelColor;
// image size
int height = src.getHeight();
int width = src.getWidth();
// scan through every pixel
for (int y = 0; y < height; y++)
{
for (int x = 0; x < width; x++)
{
// get one pixel
pixelColor = src.getPixel(x, y);
// saving alpha channel
A = Color.alpha(pixelColor);
// inverting byte for each R/G/B channel
R = 255 - Color.red(pixelColor);
G = 255 - Color.green(pixelColor);
B = 255 - Color.blue(pixelColor);
// set newly-inverted pixel to output image
bmOut.setPixel(x, y, Color.argb(A, R, G, B));
}
}
// return final bitmap
return bmOut;
}
Dieser Beitrag kann Sie in die richtige Richtung: http://stackoverflow.com/questions/32134072/qr-code-scan-from- image-file –
Yeah collector hat mir das geschickt nachdem ich gepostet habe. Ich habe es auf einer Reihe von Fotos getestet, scheitert leider an allem. – StarWind0
:/Das ist bedauerlich. Ich habe nicht versucht, den Code auszuführen, aber vielleicht ist er kaputt, aber eine Sache ist zu beachten, dass wenn die Qualität der Barcodebilder nicht gut genug für die Bibliothek ist, um sie lesen zu können, dann wird sie nicht scannen. Das ist einer der Hauptnachteile, wenn man versucht, ein statisches Bild für einen Barcode zu lesen, oder abhängig von der Bibliothek, um den Barcode in einem Strom von Live-Bildern von der Kamera auszuwählen. –