代码之家  ›  专栏  ›  技术社区  ›  DragonsCanDance

将捕获的图像从Camera2 Api传递给其他活动

  •  0
  • DragonsCanDance  · 技术社区  · 6 年前

    我只需要使用Camera2 API(使用 https://github.com/googlesamples/android-Camera2Basic )构建应用程序。早些时候,我使用了CameraAPI来做同样的事情,结果非常好。现在,我能够捕获图像并将其保存在文件中。 我被困在这一点上: 我想将捕获的图像发送到另一个活动,在该活动中,我想在imageview中显示图像 . 与CameraAPI不同,Camera2 API处理这个问题相当麻烦。 这是我试图传递inten的代码示例,即在我获得输出变量集后,我想启动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();
                    }
                }
            }
        }
    
    }
    

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

    我已经用我正在使用的代码对其进行了更新,但我正在寻找如何在使用camera2 API时在活动之间进行转换。因为在摄像头api中,这很容易。问题是run()函数在UI线程上运行,初始化ImageReader时调用该线程。整个代码就是Camera2基本代码。我尝试添加的唯一内容是在活动之间传输,并将捕获的图像发送到新活动。

    如果我能知道如何进行,那就太好了。 非常感谢。

    1 回复  |  直到 6 年前
        1
  •  2
  •   greenapps    6 年前

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

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