您现在的位置是:首页 >技术教程 >C++ + QT (不使用QT插件模式)的heic图片显示。网站首页技术教程
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..vcpkgootstrap-vcpkg.bat
4.
安装Libheif(以64位位列)
指定安装(编译)64位库
> .vcpkgvcpkg install libheif:x64-windows
#指定安装(编译)32位库
> .vcpkgvcpkg install libheif:x86-windows
#默认安装32位
> .vcpkgvcpkg 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博客
查看到如下位置,则可不用管下面的步骤了