【问题标题】:How to return a Bitmap using onPictureTaken on Android?如何在 Android 上使用 onPictureTaken 返回位图?
【发布时间】:2015-05-20 00:39:45
【问题描述】:

我正在为 Android 构建一个 API,开发人员可以在其中使用我的类来拍照。但是,如何使用 onPictureTaken 返回位图。请看我的代码:

这是 mainActivity 上的一个按钮:

button.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            // onPictureTaken does not return nothing
            // so, how can I get a bitmap from takePicture?
            Bitmap mBitmap = CameraUtils.takePicture();
        }
    });

这是我的CameraUtils类:

public class CameraUtils implements Camera.PictureCallback {

private Camera mCamera = null;
private SurfaceTexture surfaceTexture = new SurfaceTexture(0);

public Bitmap takePicture() {

    try {
        mCamera = Camera.open(1);

        Camera.Parameters params = mCamera.getParameters();
        List<Camera.Size> sizes = params.getSupportedPictureSizes();
        params.setPictureFormat(ImageFormat.JPEG);
        params.setPictureSize(sizes.get(0).width, sizes.get(0).height);
        mCamera.setParameters(params);

        mCamera.setPreviewTexture(surfaceTexture);
        mCamera.startPreview();

        Log.i("MyCamera", "before takePicture");

        new Handler().postDelayed(new Runnable() {
              @Override
              public void run() {
                 mCamera.takePicture(null, null, CameraUtils.this);
              }
            }, 1000);


        //how to return a bitmap from here??
        //how to wait for onPictureTaken??
        return ?????

    } catch (Exception e) {
        e.printStackTrace();
    }
}

@Override
public void onPictureTaken(byte[] data, Camera camera) {
        Bitmap mBitmap = BitmapFactory
                .decodeByteArray(data, 0, data.length);

        //
        // how to return something here??
        //
        //
        // What logic I have to do?
        //

        //
        //
        // return mBitmap;
        //
}
}

我必须做什么才能使用我的班级方法获得一个位图?

谢谢。

【问题讨论】:

    标签: android android-camera


    【解决方案1】:

    你没有。相反,您所做的是在 onPictureTaken 中以您想要的任何方式更新 UI。你不会从中返回任何东西。

    【讨论】:

    • 感谢您帮助我。我不想在 UI 上使用位图。我想用其他方法处理这个位图。例如:Bitmap bitmap = CameraUtils.takePicture(); CameraUtils.rotateBitmap(位图, dregrees);有没有办法做到这一点?
    • 是的,在 onPictureTaken 中做这一切
    • 但是我有很多方法来操作位图。我真的需要一些东西来获得位图并以我想要的方式处理图像。有什么逻辑,不同的在PictureTaken上做这一切吗?
    • 是的,全力以赴拍摄照片。如果您想出来会花费太长时间,请在 onPictureTaken 中启动一个线程并在那里执行。但是回调函数的全部意义在于,您可以在回调中准备好数据后做任何您想做的事情
    • 但是,问题是我真的需要在回调时只获取位图。我可以使用“监听器”来检查我的回调是否完成?然后我在我的类上创建一个静态位图,在我的回调中我把 staticBitmap = bitmap;你怎么看?
    猜你喜欢
    • 1970-01-01
    • 2013-04-20
    • 1970-01-01
    • 2015-01-15
    • 1970-01-01
    • 2012-10-26
    • 1970-01-01
    • 2012-08-09
    • 2023-03-05
    相关资源
    最近更新 更多