C++ + QT (不使用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直接手动拖到左侧的代码结构树中。

添加如下代码

#include "libheif/heif.h"
#include "qdebug.h"
QtWidgetsApplication1::QtWidgetsApplication1(QWidget *parent)
    : QMainWindow(parent)
{
    ui.setupUi(this);
    std::string filename = "C:/Users/Ys/Desktop/img/cheers_1440x960.heic";
    heif_context* heif_ctx_ = heif_context_alloc();
    if (!heif_ctx_) {
	    qDebug() << "!heif_ctx_";
    }
    heif_error error = heif_context_read_from_file(heif_ctx_, filename.c_str(), nullptr);
    if (error.code != heif_error_Ok) {
	    qDebug() << "heif_error_Ok";
    }
    heif_image_handle* heif_handle_ = nullptr;
    error = heif_context_get_primary_image_handle(heif_ctx_, &heif_handle_);
    if (error.code != heif_error_Ok) {
	    qDebug() << "heif_error_Ok";
    }
    int width_ = heif_image_handle_get_width(heif_handle_);
    int height_ = heif_image_handle_get_height(heif_handle_);

    heif_image* heif_img_ = nullptr;
    error = heif_decode_image(heif_handle_, &heif_img_, heif_colorspace_RGB, heif_chroma_interleaved_RGB, nullptr);
    if (error.code !=heif_error_Ok) {
	    qDebug() << "heif_error_Ok";
    }
    int stride;
    const uint8_t* data = heif_image_get_plane(heif_img_, heif_channel_interleaved, &stride);
//下面为使用QLabel进行展示的代码,其他图形框架根据框架要求 自行展示
    QImage img(data,width_,height_,QImage::Format_RGB888);
    ui.label->setPixmap(QPixmap::fromImage(img));
    


}

 最后将

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

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

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

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

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

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值