当前位置:   article > 正文

C++ + QT (不使用QT插件模式)的heic图片显示。_qt heic

qt heic

1.首先确定的是,要想C++读取或者显示heic图片。光用ffmpeg没有heic的解码器。所以此时就要用上libheif了。通过查资料发现,一个比较常见的 C++ 解析解码 heic 格式图片的开源库是 libheif,而这个库对 h265 的解码过程又依赖于另一个开源 C++ 库 libde265

同时从 github 上下载了这两个开源库。根据 github 上两个库 readme.md 的内容,依次编译通过 libde265 和 libheif ;

这里有简便方法。使用vcpkg来进行编译 如下步骤

1.git clone git@github.com:jakar/qt-heif-image-plugin.git

2.git clone https://github.com/microsoft/vcpkg

3..\vcpkg\bootstrap-vcpkg.bat

4.

安装Libheif(以64位位列) 

指定安装(编译)64位库
> .\vcpkg\vcpkg install libheif:x64-windows
#指定安装(编译)32位库
> .\vcpkg\vcpkg install libheif:x86-windows
#默认安装32位
> .\vcpkg\vcpkg install libheif 

此步骤 安装和编译Libheif 会自动下载编译所需要的其他库。根据你需要的是x86还是x64的库自行选择。编译好后,就会生产如下

点击进去是这样的

此时libheif和libde265就自动编译好了。

打开VS新建一个C++或者QT工程。因为我这里需要使用QT显示hiec图片。

这里以x86工程展示。添加头文件和lib文件夹,如果是x64工程,则更改x86-window为x64-windows目录

 

 在将

这3个lib直接手动拖到左侧的代码结构树中。

添加如下代码

  1. #include "libheif/heif.h"
  2. #include "qdebug.h"
  3. QtWidgetsApplication1::QtWidgetsApplication1(QWidget *parent)
  4. : QMainWindow(parent)
  5. {
  6. ui.setupUi(this);
  7. std::string filename = "C:/Users/Ys/Desktop/img/cheers_1440x960.heic";
  8. heif_context* heif_ctx_ = heif_context_alloc();
  9. if (!heif_ctx_) {
  10. qDebug() << "!heif_ctx_";
  11. }
  12. heif_error error = heif_context_read_from_file(heif_ctx_, filename.c_str(), nullptr);
  13. if (error.code != heif_error_Ok) {
  14. qDebug() << "heif_error_Ok";
  15. }
  16. heif_image_handle* heif_handle_ = nullptr;
  17. error = heif_context_get_primary_image_handle(heif_ctx_, &heif_handle_);
  18. if (error.code != heif_error_Ok) {
  19. qDebug() << "heif_error_Ok";
  20. }
  21. int width_ = heif_image_handle_get_width(heif_handle_);
  22. int height_ = heif_image_handle_get_height(heif_handle_);
  23. heif_image* heif_img_ = nullptr;
  24. error = heif_decode_image(heif_handle_, &heif_img_, heif_colorspace_RGB, heif_chroma_interleaved_RGB, nullptr);
  25. if (error.code !=heif_error_Ok) {
  26. qDebug() << "heif_error_Ok";
  27. }
  28. int stride;
  29. const uint8_t* data = heif_image_get_plane(heif_img_, heif_channel_interleaved, &stride);
  30. //下面为使用QLabel进行展示的代码,其他图形框架根据框架要求 自行展示
  31. QImage img(data,width_,height_,QImage::Format_RGB888);
  32. ui.label->setPixmap(QPixmap::fromImage(img));
  33. }

 最后将

这3个库 放到生成exe统计目录下即可。 

此文章使用的编译好的libheif库等其他库

https://download.csdn.net/download/qq_39501474/87738906

关于编译libheif可以查看Qt 支持HEIC/HEIF格式图片_安装libde265_妹说零卡的博客-CSDN博客

查看到如下位置,则可不用管下面的步骤了

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Li_阴宅/article/detail/841687
推荐阅读
  

闽ICP备14008679号