2016-08-02 2 views
-2

私はバーコードのスキャンを含むアプリケーションで作業しています。これまでのところ、私は正常にカメラのプレビューを使用してバーコードを以下のようにスキャンしました。リンクhttps://github.com/ZBar/ZBarzbarを使用してバーコードイメージをスキャンしますか?

しかし、それは私のニーズを実際に満たしていません。この例では、カメラプレビューを使用しています。しかし、私のプロジェクトアプリケーションでは、ボタンをクリックするだけでカメラにアクセスすることができます(インテント)。

その後、キャプチャされたイメージをバイト配列に変換します。

イメージ(バイト配列)をスキャンするためにZbarを有効にする方法はありますか?または、カメラのプレビューではなくアンドロイドのカメラでZbarを使用する方法はありますか?

ありがとうございます。

これは私のMainActivity.javaで、ユーザが意図に基づいてカメラにアクセスできるようにします。

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"); 
    } 
}} 

答えて

0

Zbar libsのすべてのカメラの機能を継承して、作業が容易になります。ただし、Zbar apiを使用してバーコードをスキャンする独自のCamera/CameraPreviewを作成することはできます。

以下のコードスニペットでは、各フレームのバーコードをZbarでスキャンする方法について説明しています。 onPreviewFrameコールバックは、カメラでキャプチャされた各フレームを提供します。ここで

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

、あなたはonPreviewFrame callabckを上書きし、独自のカメラのアクティビティを作成する必要があります。また、iconvライブラリ(一部はZlib)を読み込み、Scannerインスタンスをインスタンス化する必要があります。

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

ImageScanner scanner = new ImageScanner(); 
scanner.setConfig(0, Config.X_DENSITY, 3); 
scanner.setConfig(0, Config.Y_DENSITY, 3); 
関連する問題