【问题标题】:How to convert .png/.jpg format file to android.media.Image object?如何将 .png/.jpg 格式文件转换为 android.media.Image 对象?
【发布时间】:2021-09-24 18:25:55
【问题描述】:

我有一个 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);

有可能吗?

【问题讨论】:

  • 我的意思是你有它的反汇编版本。您可以更改代码,从更改的代码构建一个新的 APK,自己签名,然后使用它。或者您是否要求提供有关如何对 Android 应用程序进行逆向工程的分步指南,这超出了 SO 问题的范围。
  • 我在问如何将 png 文件转换为 android.media.Image 对象
  • 你没有。 Image 是一个抽象类,它定义了一个带有关于图像的元数据的接口。只需创建一个新的 Image 子类并实现所有 api。

标签: android android-camera android-image android-camera2 image-reader


【解决方案1】:

Image 是由硬件缓冲区支持的系统资源,您不能只实现自己的变体。但是,您可以做的是创建一个带有所需参数的ImageReader(您可能希望使用与原始应用程序期望的相同大小和格式),从中获取一个surface 并将您的png 绘制到该表面。您可以使用最适合您需求的绘图方法 - 调用 lockCanvas 并在 CPU 上绘图或使用 Vulkan / OpenGL / Renderscript(取决于图像格式,其中一些方法可能无法使用)。

另外,我不会使用另一个ImageReader 创建图像并将其注入onImageAvailable,而是考虑使用现有的ImageReader,但将图像的生产者(在您的情况下为相机)替换为您自己的。所以基本上你可以从现有的ImageReader 中获取surface,而不是将其传递到相机会话中,只需自己绘制即可。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-15
    相关资源
    最近更新 更多