2016-08-02 17 views
-2

Ich arbeite an einer Anwendung, die das Scannen von Barcodes beinhaltet. Bisher habe ich erfolgreich die Barcodes mit der Kameravorschau gescannt, indem ich die folgenden Punkte befolge. link https://github.com/ZBar/ZBarMit der zbar Barcode-Bilder scannen?

Allerdings funktioniert die Art, wie es funktioniert nicht wirklich meine Bedürfnisse. Das Beispiel verwendet eine Kameravorschau. In meiner Projektanwendung habe ich jedoch eine Anwendung, die es Benutzern ermöglicht, per Knopfdruck auf die Kamera zuzugreifen (Intent).

Danach konvertiert es die erfassten Bilder in Byte-Array.

Gibt es trotzdem zu verwenden aktivieren Zbar Bilder (Byte-Arrays) stattdessen zu scannen? Oder gibt es sowieso Zbar mit Android-Kamera anstelle von Kamera-Vorschau zu verwenden?

Vielen Dank.

Dies ist meine MainActivity.java, die Benutzern den Zugriff auf die Kamera über Absicht ermöglicht.

public class MainActivity extends Activity { 

Button cameraBtn; 
final int REQUEST_IMAGE_CAPTURE = 1; 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    setContentView(R.layout.activity_main); 

    cameraBtn = (Button)findViewById(R.id.cameraBtn); 

    cameraBtn.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
      startActivityForResult(cameraIntent, REQUEST_IMAGE_CAPTURE); 
     } 
    }); 
} 

protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if (requestCode == REQUEST_IMAGE_CAPTURE && resultCode == RESULT_OK) { 
     Bundle extras = data.getExtras(); 
     Bitmap imageBitmap = (Bitmap) extras.get("data"); 
    } 
}} 

Antwort

0

Zbar Libs erleichtert Ihnen die Arbeit durch alle Kamerafunktionen vererben. Sie können jedoch weiterhin Ihre eigene Kamera/Kameravorschau erstellen, um Barcodes mit Zbar APIs zu scannen.

Im folgenden Code Schnipsel erklärt, wie Zbar scannt Ihren Barcode für jeden Rahmen. onPreviewFrame Callback gibt Ihnen jeden von Ihrer Kamera aufgenommenen Rahmen.

public void onPreviewFrame(byte[] data, Camera camera) { 
      Camera.Parameters parameters = camera.getParameters(); 
      Size size = parameters.getPreviewSize(); 

      Image barcode = new Image(size.width, size.height, "Y800"); 
      barcode.setData(data); 

      int result = scanner.scanImage(barcode); 
      if (result != 0) { 
       SymbolSet syms = scanner.getResults(); 
       for (Symbol sym : syms) { 
        Log.v("", sym.getData()); 
       } 
      } 
} 

Hier müssen Sie Ihre eigene Kamera-Aktivität erzeugen, die onPreviewFrame callabck außer Kraft setzt. Außerdem müssen Sie die iconv-Bibliothek (Teil von Zlib) laden und die Scanner-Instanz instanziieren.

static { 
    System.loadLibrary("iconv"); 
} 

ImageScanner scanner = new ImageScanner(); 
scanner.setConfig(0, Config.X_DENSITY, 3); 
scanner.setConfig(0, Config.Y_DENSITY, 3);