将捕获的图像从 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);
我刚刚用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);