当前位置: 首页>移动开发>正文

Android Heifwriter 详细使用,附代码

官方Api文档:https://android-dot-google-developers.gonglchuangl.net/reference/androidx/heifwriter/package-summary

Android 9(P)新的图片格式HEIF,仅展示使用Bitmap 转 HEIF 格式照片,使用方法
Android Heifwriter 详细使用,附代码,第1张
界面写按钮,调用submit方法.png
HeifWriterApi heifWriterApi = new HeifWriterApi();
findViewById(R.id.button).setOnClickListener((v) -> {
    try {
        heifWriterApi.submit(this);
    } catch (Exception e) {
        throw new RuntimeException(e);
    }
});

public class HeifWriterApi {
    private static final String TAG = "HeifWriterApi";
    private final ExecutorService executorService;
    private final Handler handler;
    private final Semaphore semaphore = new Semaphore(2, true);

    public HeifWriterApi() {
        executorService = Executors.newFixedThreadPool(2);
        HandlerThread handlerThread = new HandlerThread("HeifEncoderThread", -2);
        handlerThread.start();
        handler = new Handler(handlerThread.getLooper());
    }

    public void submit(Context context) {
        executorService.submit(() -> {
            long eTime = System.currentTimeMillis();
            try {
                Log.i(TAG, "init2, 1111111111111111111111111  myTid = " + Process.myTid() + ", E");
                semaphore.acquire();
                String pathA = context.getFilesDir().getPath() + File.separator + "aaaa.heif";
                String bitmapPath = context.getFilesDir().getPath() + File.separator + "IMG_20230907_170526.jpg";
                //String bitmapPath = context.getFilesDir().getPath() + File.separator + "wallhaven-1pqyyw.jpg";
                Bitmap bitmap = BitmapFactory.decodeFile(bitmapPath);
                Log.i(TAG, "init2: pathA = " + pathA);
                Log.i(TAG, "init2: bitmapPath = " + bitmapPath);
                Log.i(TAG, "init2: bitmap w*h = " + bitmap.getWidth() + "*" + bitmap.getHeight());
                HeifWriter heifWriter = new HeifWriter.Builder(pathA, bitmap.getWidth(), bitmap.getHeight(), HeifWriter.INPUT_MODE_BITMAP)
                        .setQuality(85)
                        //.setHandler(handler)
                        .build();
                heifWriter.start();
                heifWriter.addBitmap(bitmap);
                heifWriter.stop(0);
                heifWriter.close();
            } catch (Exception e) {
                Log.e(TAG, "init2: ", e);
                throw new RuntimeException(e);
            } finally {
                semaphore.release();
                Log.i(TAG, "init2, 1111111111111111111111111  myTid = " + Process.myTid() + ", X time = " + (System.currentTimeMillis() - eTime));
            }
        });
    }
}
log输出
2023-10-21 23:36:18.403  5191-5221  HeifWriterApi           com.zyk.android_zhaoyk               I  init2, 1111111111111111111111111  myTid = 5221, E
2023-10-21 23:36:18.636  5191-5221  HeifWriterApi           com.zyk.android_zhaoyk               I  init2: pathA = /data/user/0/com.zyk.android_zhaoyk/files/aaaa.heif
2023-10-21 23:36:18.637  5191-5221  HeifWriterApi           com.zyk.android_zhaoyk               I  init2: bitmapPath = /data/user/0/com.zyk.android_zhaoyk/files/wallhaven-1pqyyw.jpg
2023-10-21 23:36:18.639  5191-5221  HeifWriterApi           com.zyk.android_zhaoyk               I  init2: bitmap w*h = 3840*2160
2023-10-21 23:36:20.885  5191-5221  HeifWriterApi           com.zyk.android_zhaoyk               I  init2, 1111111111111111111111111  myTid = 5221, X time = 2482
多线程调用,当Bitmap过大的时候可能会出现以下报错
Codec reported err 0xfffffff4/NO_MEMORY, actionCode 0, while in state 5/STARTING
这个错误信息表示编解码器报告了一个内存不足的错误,错误代码为0xffffffff4/NO_MEMORY。在状态5/STARTING时发生了这个错误。
为了解决这个问题,你可以尝试以下方法:
    1.使用单线程处理大图格式转换。
    2. 关闭其他占用大量内存的程序,以释放更多内存供编解码器使用。
    3. 增加系统可用内存,例如通过增加物理内存或调整虚拟内存设置。
    4. 如果可能的话,尝试升级硬件设备,以提高内存容量。

Codec reported err 0x80000000/UNKNOWN_ERROR, actionCode 0, while in state 6/STARTED
这个错误信息表示编解码器报告了一个未知错误,错误代码为0x80000000/UNKNOWN_ERROR。在状态6/STARTED时发生了这个错误。
为了解决这个问题,你可以尝试以下方法:
    1. 检查你的编解码器是否正确安装和配置。
    2. 确保你的系统资源充足,如内存、处理器等。
    3. 尝试更新编解码器的驱动程序或软件。
    4. 如果问题仍然存在,建议查阅相关文档或寻求技术支持。

https://www.xamrdz.com/mobile/47j1996058.html

相关文章: