如何将.png/.jpg 格式文件转换为android.media.Image 对象?
How to convert .png/.jpg format file to android.media.Image object?
我有一个 android 应用程序并注意到它是 onImageAvailable(ImageReader imagereader) 函数,它在可用时从 ImageReader 获取图像并进行处理。我的目标是操纵该 Image 对象,以便它处理 png 文件而不是从相机中获取该图像。所以,我想改变
this.imagereader.setOnImageAvailableListener(new ImageReader.OnImageAvailableListener() {
public final void onImageAvailable(ImageReader imageReader) {
Image image = imageReader.acquireLatestImage();
}
}, this.thread1);
类似于
this.imagereader.setOnImageAvailableListener(new ImageReader.OnImageAvailableListener() {
public final void onImageAvailable(ImageReader imageReader) {
Image image = //png path;
}
}, this.thread1);
可能吗?
Image
是由硬件缓冲区支持的系统资源,您不能只实现自己的变体。然而,您可以做的是创建一个具有所需参数的 ImageReader
(您可能希望使用与原始应用程序期望的大小和格式相同的大小和格式),采用 surface from it and draw your png to that surface. You can use a drawing method that suites best your needs - either call lockCanvas 并绘制 CPU 或使用 Vulkan / OpenGL / Renderscript(根据图像格式的使用标记,其中一些方法可能无法实现)。
此外,我会考虑使用现有的 ImageReader
,而不是使用另一个 ImageReader
创建图像并将其注入 onImageAvailable
,而是替换图像的制作者 - 相机你的案子——你自己的案子。所以基本上你可以从现有的 ImageReader
中获取 surface
而不是将其传递到相机会话中,只需自己绘制即可。
我有一个 android 应用程序并注意到它是 onImageAvailable(ImageReader imagereader) 函数,它在可用时从 ImageReader 获取图像并进行处理。我的目标是操纵该 Image 对象,以便它处理 png 文件而不是从相机中获取该图像。所以,我想改变
this.imagereader.setOnImageAvailableListener(new ImageReader.OnImageAvailableListener() {
public final void onImageAvailable(ImageReader imageReader) {
Image image = imageReader.acquireLatestImage();
}
}, this.thread1);
类似于
this.imagereader.setOnImageAvailableListener(new ImageReader.OnImageAvailableListener() {
public final void onImageAvailable(ImageReader imageReader) {
Image image = //png path;
}
}, this.thread1);
可能吗?
Image
是由硬件缓冲区支持的系统资源,您不能只实现自己的变体。然而,您可以做的是创建一个具有所需参数的 ImageReader
(您可能希望使用与原始应用程序期望的大小和格式相同的大小和格式),采用 surface from it and draw your png to that surface. You can use a drawing method that suites best your needs - either call lockCanvas 并绘制 CPU 或使用 Vulkan / OpenGL / Renderscript(根据图像格式的使用标记,其中一些方法可能无法实现)。
此外,我会考虑使用现有的 ImageReader
,而不是使用另一个 ImageReader
创建图像并将其注入 onImageAvailable
,而是替换图像的制作者 - 相机你的案子——你自己的案子。所以基本上你可以从现有的 ImageReader
中获取 surface
而不是将其传递到相机会话中,只需自己绘制即可。