libheif —— 2、编写苹果、小米的.heic图片查看器

效果图

.heic简介

     HEIC,是iOS 11更新后,iPhone 7及其后硬件,在拍摄照片时的默认图像存储格式。

在这里插入图片描述

     HEIC是一种图像格式,上线时间还比较短,只有4年左右。自iOS 11和macOS High Sierra(10.13)内测开始,苹果将HEIC设置为图片存储的默认格式。与JPG相比,它占用的空间更小,画质更加无损。HEIC格式照片支持iOS11及macOS High Sierra(10.13)及更新版本。但是此种格式是无法在Windows 中直接使用看图软件打开的(Windows10 RS4开始支持该格式)。

代码
// 传入.heif、.heic等类型图片路径
bool loadHeic(const std::string &fileName)
{// 创建读取heif创建上下文heif_context *heifCtx = heif_context_alloc();if (!heifCtx) { return false; }// 从命名磁盘文件中读取HEIF文件heif_error heifErr = heif_context_read_from_file(heifCtx, fileName.c_str(), nullptr);if (heifErr.code != heif_error_code::heif_error_Ok) { return false; }// 获取HEIF文件的主映像的句柄heif_image_handle *heif_hangle = nullptr;heifErr = heif_context_get_primary_image_handle(heifCtx, &heif_hangle);if (heifErr.code != heif_error_code::heif_error_Ok) { return false; }// 获取图像的分辨率int heifW = heif_image_handle_get_width(heif_hangle);int heifH = heif_image_handle_get_height(heif_hangle);// 解码为实际像素图像,执行HEIF文件中指定的所有几何变换heif_image *heifIMG = nullptr;heifErr = heif_decode_image(heif_hangle,&heifIMG,heif_colorspace_RGB,heif_chroma_interleaved_RGB,nullptr);if (heifErr.code != heif_error_code::heif_error_Ok) { return false; }const uint8_t* data = heif_image_get_plane(heifIMG, heif_channel_interleaved, nullptr);QImage qIMG(data, heifW, heifH, QImage::Format_RGB888);if (qIMG.isNull()) { return false; }ui.label->resize(heifW, heifH);ui.label->setPixmap(QPixmap::fromImage(qIMG.scaled(1152, 768)));// 释放相关内存if (heifIMG) { heif_image_release(heifIMG); }heifIMG = nullptr;if (heif_hangle) { heif_image_handle_release(heif_hangle); }heif_hangle = nullptr;if (heifCtx) { heif_context_free(heifCtx); }heifCtx = nullptr;return true;
}void main()
{// 初始化heifheif_init(nullptr);loadHeic("./xxx.heic");// 注销heifheif_deinit();
}

关注

Wx GZH:码农总动员

笔者 - jxd

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/61270.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

16-2_Qt 5.9 C++开发指南_使用样式表Qss自定义界面

进行本篇介绍学习前,请先参考链接01_1_Qt工程实践_Qt样式表Qss,后再结合本篇进行融合学习如何使用样式表定义界面。 文章目录 1. Qt样式表2. Qt样式表句法2.1 一般句法格式2.2 选择器 (selector)2.3 子控件(sub-controls)2.4 伪状…

将应用设置成系统App/获取Android设备SN号

1,和系统签名一致;(签名设置签名文件) 2,配置Manifest 至此你的App就是一个系统App了,可以执行一些系统App才能有的操作,如获取机器SN号: public String getSerialNumber() {Strin…

lwip使用收发线程和不使用收发线程差异

使用收发线程的方式相对于不使用收发线程的方式,效率可能会稍低一些,这取决于具体的应用场景和实现方式。 lwIP(轻量级IP协议栈)是一个针对嵌入式系统的开源TCP/IP协议栈。它可以在单个线程中运行,也可以在多个线程中…

如何理解MySQL隔离性---3个记录隐藏字段、undo日志、Read View

目录 一、3个记录隐藏字段 二、undo 日志 三、read view 一、3个记录隐藏字段 本片文章是帮助理解上篇文章Mysql隔离性的辅助知识。 mysql在建表时,不仅仅创建了表的结构,还创建了3个隐藏字段。 DB_TRX_ID :6 byte,最近修改( 修…

梳理日常开发涉及的负载均衡

负载均衡是当前分布式微服务时代最能提及的词之一,出于对分层、解耦、弱依赖、可配置、可靠性等概念的解读,一对一的模式变得不再可信赖,千变万化的网络环境中,冗余和备份显得格外重要,稍大型的系统就会存在大量微服务…

MES系统在机器人行业生产管理种的运用

机器人的智能水平也伴随技术的迭代不断攀升。 2021年的春晚舞台上,来自全球领先工业机器人企业abb的全球首款双臂协作机器人yumi,轻松自如地表演了一出写“福”字,赢得了全国观众的赞叹。 在汽车装配领域,一台机器人可以自主完成一…

中级课程——XSS

文章目录 介绍挖掘思路分类反射型存储型dom类型 介绍 挖掘思路 注入点:各种输入框 测试代码(poc):js语句 分类 反射型 存储型 dom类型

Wisej.NET Crack,Wisej.NET的核心功能

Wisej.NET Crack,Wisej.NET的核心功能 Wisej.NET是一个跨平台的web框架,用于使用.NET和C#/VB.NET而不是HTML和JavaScript构建现代HTML5应用程序。它包含创建任务关键型web应用程序所需的一切,包括UI组件、会话处理、状态管理和后端集成。借助…

go-admin 使用开发

在项目中使用redis 作为数据缓存:首先引入该包 “github.com/go-redis/redis/v8” client : redis.NewClient(&redis.Options{Addr: config.QueueConfig.Redis.Addr, // Redis 服务器地址Password: config.QueueConfig.Redis.Password, // Redis 密码&…

如何使用Mac终端给树莓派pico构建C/C++程序进行开发,以及遇到各种问题该怎么处理,不使用任何IDE或编辑器(例如VS Code)

写本文的原因是官方的教程已经过时了,如果你现在按照官方教程来在 Mac 上进行配置,那么会遇到一堆问题,比如我几乎把能踩的“雷”都踩了。所以这里记录了完整过程,以及各种错误的原因和处理方法,不然以后换 Mac 了或者…

Jenkins自动化打包脚本

一、背景 jenkins可以设置定时任务打包,也已手动点按钮打包,还可以通过执行http请求打包,今天我们就通过shell脚本,通过curl命令进行jenkins打包。 二、步骤 2.1 在jenkins上构建项目 设置触发器 2.2 通过shell脚本触发远程构…

halo --- 上传图片服务器错误

文章目录 问题定位过程1、查看日志 报错的是数据库操作异常2、再次上传一张小一点的图片3、检查nginx的配置文件 原因解决 问题 上传图片时,报错服务器错误(包括上传附件、博客文章插入图片、上传相册) 定位过程 1、查看日志 报错的是数据库…