将捕获的图像从 Camera2 Api 传递到另一个 Activity

Passing captured Image from Camera2 Api to another Activity

我刚刚用Camera2 API(使用https://github.com/googlesamples/android-Camera2Basic的代码设计)来构建一个应用程序。之前我用camera API 也做过,效果还不错。现在,我能够捕获图像并将其保存在文件中。 我被困在这一点上: 我想将捕获的图像发送到另一个 activity,我想在图像视图中显示图像。与 Camera API 不同,Camera2 Api 处理起来相当麻烦。 这是我尝试传递意图的代码示例,即在我设置输出变量后,我想加注星标 Activity,将其传递给下一个 Activity。 :

 /**
 * Saves a JPEG {@link Image} into the specified {@link File}.
 */
private static  class ImageSaver implements Runnable   {

    /**
     * The JPEG image
     */


    private final Image mImage;
    /**
     * The file we save the image into.
     */
    private final File mFile;

    ImageSaver(Image image, File file) {
        mImage = image;
        mFile = file;

    }

    @Override
    public void run() {
        ByteBuffer buffer = mImage.getPlanes()[0].getBuffer();
        byte[] bytes = new byte[buffer.remaining()];
        buffer.get(bytes);
        FileOutputStream output = null;
        try {
            output = new FileOutputStream(mFile);
            output.write(bytes);
           Intent i = new Intent(current activity, next activity)
                   startActivity(i);

        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            mImage.close();

            if (null != output) {
                try {
                    output.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }

}

这是我想将 activity 调用传递给下一个 activity 的地方(在 camera2Basic 代码中)。这里面临的这个问题是,在这个 class 中没有任何上下文变量或 Main activity 的实例可用,并且由于封闭方法是静态的,我无法启动 activity/pass 意图。

我已经用我正在使用的代码更新了它,但我正在寻找如何在我使用 camera2 时在活动之间转移 API。因为在相机 api 中,这很容易。问题是 UI 线程上的 运行() 函数 运行s,它会在 ImageReader 初始化时调用。整个代码只是 Camera2Basic 代码。我唯一想添加的是在活动之间转移并将捕获的图像发送到新的 activity.

如果我能知道如何继续,那就太好了。 谢谢!

实例化 ImageSaver 时添加上下文变量class。

Context mContext;

ImageSaver(Image image, File file, Context context) {
    mImage = image;
    mFile = file;
    mContext = context;
}

然后改变

 startActivity(i);

Intent i = new Intent(mContext, next activity)  
((Activity)mContext).startActivity(i);