0

hereImageReaderから使用するための Google の例を取り上げました。

コードはCamera2API を使用ImageReaderし、画像のクエリがプレビューとは異なるスレッドで実行されるようにします。

Android KitKat (API 20) をターゲットにしたいので、そのImageReader部分はそのままで古い Camera API を使用するようにコードを変更する必要があります。

を設定する元のコードの一部を次に示しますonImageAvailableListener

/**
 * THIS IS CALLED WHEN OPENING CAMERA
 * Sets up member variables related to camera.
 *
 * @param width  The width of available size for camera preview
 * @param height The height of available size for camera preview
 */
private void setUpCameraOutputs(int width, int height) {
 Activity activity = getActivity();
    CameraManager manager = (CameraManager) activity.getSystemService(Context.CAMERA_SERVICE);
    try {
        for (String cameraId : manager.getCameraIdList()) {
            CameraCharacteristics characteristics
                    = manager.getCameraCharacteristics(cameraId);

            // We don't use a front facing camera in this sample.
            Integer facing = characteristics.get(CameraCharacteristics.LENS_FACING);
            if (facing != null && facing == CameraCharacteristics.LENS_FACING_FRONT) {
                continue;
            }

            StreamConfigurationMap map = characteristics.get(
                    CameraCharacteristics.SCALER_STREAM_CONFIGURATION_MAP);
            if (map == null) {
                continue;
            }

            // For still image captures, we use the largest available size.
            Size largest = Collections.max(
                    Arrays.asList(map.getOutputSizes(ImageFormat.JPEG)),
                    new CompareSizesByArea());
            mImageReader = ImageReader.newInstance(largest.getWidth(), largest.getHeight(),
                    ImageFormat.JPEG, /*maxImages*/2);
            mImageReader.setOnImageAvailableListener(
                    mOnImageAvailableListener, mBackgroundHandler);
   .
   . 
   .
   .
   }

これで、古い Camera API を使用できるようになりました。しかし、私はそれを と接続することに迷っていImageReaderます。onImageListenerそのため、画像が配信されたらアクセスできるようにするには、どのように設定すればよいかわかりません。

これが私の修正です:

  @Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
mTextureView = (AutoFitTextureView) v.findViewById(R.id.texture);
mTextureView.setSurfaceTextureListener(new SurfaceTextureListener() {
  @Override
  public void onSurfaceTextureUpdated(SurfaceTexture surface) {
  }
  @Override
  public void onSurfaceTextureSizeChanged(SurfaceTexture surface,
      int width, int height) {
  }
  @Override
  public boolean onSurfaceTextureDestroyed(SurfaceTexture surface) {
    return true;
  }
  @Override
  public void onSurfaceTextureAvailable(SurfaceTexture surface,
      int width, int height) {
      mCamera = Camera.open();

    try {

      Camera.Parameters parameters = mCamera.getParameters();

      if (getActivity().getResources().getConfiguration().orientation != Configuration.ORIENTATION_LANDSCAPE) {
        // parameters.set("orientation", "portrait"); // For
        // Android Version 2.2 and above
        mCamera.setDisplayOrientation(90);
        // For Android Version 2.0 and above
        parameters.setRotation(90);
      }
      mCamera.setParameters(parameters);
      mCamera.setPreviewTexture(surface);

    } catch (IOException exception) {
      mCamera.release();
    }

    mCamera.startPreview();
    setUpCameraOutputs(width, height); 
    tfPreviewListener.initialize(getActivity().getAssets(), scoreView);

  }
});
}

ImageReader私の質問は、上記のコードを正しく機能させるためにどのように追加すればよいですか?

前もって感謝します。

4

0 に答える 0