对于c ++项目,我需要打开并显示HEIF(.heic)图像。我所知道的(如果我是对的)是HEIF图像基于ffmpeg标准,并且需要读取H265编解码器。
我找到了几个开源的H265编解码器:
我可以打开并显示每个H265编码的视频文件,但我无法简单地打开,显示或转换.heic图像。所有这些都会返回错误,或者什么都不做。
老实说,我有点疑惑,因为HEIF标准似乎是一个保密的秘密。我无法找到可以让我走到解决方案的相关信息。我找到的只是技巧和解决方法,例如强迫设备(我在这里讲的是关于使用新iOS11的Apple iPhone)生成jpg图像而不是heic,或使用像dr.fone这样的第三方应用程序。当然,这些解决方案对我来说无关紧要。
那么,有人可以告诉我应该使用哪个编解码器和.heif图像,以及如何使用它来打开它?或者是否有开源库或允许操作此类图像文件的示例?有人能指出我的好方向吗?
答案 0 :(得分:3)
诺基亚针对HEIF的示例查看器可用here。我还直接使用FFmpeg测试,它能够打开(播放/解压缩)提供的conformance files。
答案 1 :(得分:1)
libheif对于HEIF来说似乎是非常活跃的LGPL库,带有C API。从自述文件:
该库具有一个C API,可轻松集成并支持多种语言。请注意,API仍在开发中,并且可能仍会更改。
将主图像加载到HEIF文件中很容易:
heif_context* ctx = heif_context_alloc(); heif_context_read_from_file(ctx, input_filename, nullptr); // get a handle to the primary image heif_image_handle* handle; heif_context_get_primary_image_handle(ctx, &handle); // decode the image and convert colorspace to RGB, saved as 24bit interleaved heif_image* img; heif_decode_image(handle, &img, heif_colorspace_RGB, heif_chroma_interleaved_24bit, nullptr); int stride; const uint8_t* data = heif_pixel_image_get_plane_readonly(img, heif_channel_interleaved, &stride);
一个由Emscripten驱动的不错的demo可用,它实际上使您可以直接在浏览器中加载和查看HEIF文件。