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.mzph.cn/news/31277.shtml

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

相关文章

Redis的AOF持久化

除了RDB持久化功能之外,Redis还提供了AOF持久化功能。与RDB 持久化通过保存数据库中的键值对来记录数据库状态不同,AOF持久化是通过保存Redis服务器所执行的写命令来记录数据库状态的,如下图所示。 举个例子,如果我们对空白的数据…

Oracle的function執行DML操作

Oracle的function並不支持DML操作,但可以使用一段指令,讓這段pl/sql成為獨立的事務。 当使用 PRAGMA AUTONOMOUS_TRANSACTION 时,可以在一个过程或函数的独立代码块中执行数据库操作,而不受外部事务的影响。这意味着内部事务的提交…

uniapp开发小程序-分包(微信错误码:800051)

在使用uniapp开发小程序时,上传的时候因为文件过大,显示上传失败。 以下是开发过程中遇到的问题及解决方法: 1. 问题一:因为文件过大,显示上传失败 ①尝试过把本地使用的图片压缩到最小; ②把图片转换为网…

MongoDB安装和配置

一、MongoDB安装和配置 1、进入官网下载你所需要的安装版本,点击直通官网 Step1:进入官网后,将看到如下界面,点击上方导航栏Products,找到Community Server Step2:选择自己需要的版本、系统和压缩方式 2、下…

【Linux】系统内核中System.map中字段含义解释

可以通过命令行过来初始化内容 cat System.map-4.18.0-193.el8.x86_64 | grep pci | grep initcall "T":表示该符号是一个全局函数,可以被其他模块或文件访问。 "D":表示该符号是一个全局数据对象,可以被其…

flutter开发实战-颜色Color与16进制转换

flutter开发实战-颜色Color与16进制转换 一、颜色Color与16进制转换 代码如下 import dart:ui; class ColorUtil {/// 十六进制颜色,/// hex, 十六进制值,例如:0xffffff,/// alpha, 透明度 [0.0,1.0]static Color hexColor(int hex, {doub…

Python爬虫的解析(学习于b站尚硅谷)

目录 一、xpath  1.xpath插件的安装  2. xpath的基本使用  (1)xpath的使用方法与基本语法(路径查询、谓词查询、内容查询(使用text查看标签内容)、属性查询、模糊查询、逻辑运算)  (2&a…

Vc - Qt - 绘制绿色矩形

要在Qt中绘制一个绿色矩形&#xff0c;您需要创建一个自定义的QWidget或QGraphicsView类&#xff0c;在其绘制事件中使用QPainter来绘制形状。 以下是一个简单的示例&#xff0c;演示如何在QWidget中绘制一个绿色矩形&#xff1a; #include <QWidget> #include <QPain…

JuiceFS 在多云存储架构中的应用 | 深势科技分享

2020 年末&#xff0c;谷歌旗下 DeepMind 研发的 AI 程序 AlphaFold2 在国际蛋白质结构预测竞赛上取得惊人的准确度&#xff0c;使得 “AI 预测蛋白质结构” 这一领域受到了空前的关注。今天我们邀请到同领域企业&#xff0c;深势科技为大家分享其搭建基础平台时的实践与思考。…

Linux学习之sed删除、追加、插入、更改、读写文件、下一行、打印、退出和seq命令

cat /etc/redhat-release看到操作系统是CentOS Linux release 7.6.1810&#xff0c;uname -r看到内核版本是3.10.0-957.el7.x86_64&#xff0c;sed --version可以看到sed版本是4.2.2。 echo a : 1 : good : g >> sed_daicpnrwq.txt echo b : 2 : well : w >> sed…

AttentionFreeTransformer 源码解析(一):AFTFull、AFTSimple、AFTLocal

我觉得源码写的很好懂&#xff0c;我就不加注释了&#xff0c;直接上计算流程图。 AFTFull class AFTFull(nn.Module):def __init__(self, max_seqlen, dim, hidden_dim64):super().__init__()max_seqlen: the maximum number of timesteps (sequence length) to be fed indim…

WordPress博客发布到公网可访问【 windows系统及linux系统操作】

文章目录 1. 免费注册并下载安装cpolar内网穿透1.1 windows系统1.2 linux系统 2. 将内网映射到公网3. 获取所映射的公网地址 要将自己搭建的个人WordPress博客网站发布到公网可访问&#xff0c;比较常规的做法是买服务器、域名&#xff0c;将其部署到服务器上&#xff0c;备案发…

断续模式(DCM)与连续模式(CCM)

断续模式&#xff08;DCM&#xff09;与连续模式&#xff08;CCM)是开关电源最常用的两种工作模式。当初级开关管导通前&#xff0c;初级绕组还存在能量&#xff0c;不完全传递到次级&#xff0c;这种情况就叫连续模式。若初级绕组能量完全传递到次级&#xff0c;则为断续模式。…

linux鲁班猫代码初尝试[编译镜像][修改根文件系统重编译]

编译镜像 官方百度云盘资料:https://doc.embedfire.com/linux/rk356x/quick_start/zh/latest/quick_start/baidu_cloud/baidu_cloud.html 解压虚拟机压缩包:"鲁班猫\8-SDK源码压缩包\开发环境虚拟机镜像\ubuntu20.04.7z"后既可以用VMware打开,打开后可以看到已经有…

笙默考试管理系统-MyExamTest----codemirror(4)

笙默考试管理系统-MyExamTest----codemirror&#xff08;4&#xff09; 目录 笙默考试管理系统-MyExamTest----codemirror&#xff08;4&#xff09; 一、 笙默考试管理系统-MyExamTest----codemirror 二、 笙默考试管理系统-MyExamTest----codemirror 三、 笙默考试管…

Java顺序表解析与应用

一、顺序表概念 顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构&#xff0c;一般情况下采用数组存储。在数组上完成数据的增删查改。 二、主要功能接口实现 Java顺序表底层就是一个动态数组。其主要功能接口如下&#xff1a; // 1.打印顺序表&#xff0…

Vue3项目中将html元素转换为word

下载插件 html转word插件 pnpm i --save html-docx-js-typescript生成临时链接 pnpm i file-saver代码部分 html部分&#xff0c;为要下载的部分用id做唯一标识 <div :id"mode-${chart.id}"><pre><VueShowdown :markdown"chart.content&quo…

手势识别-手势音量控制(opencv)

本项目是使用了谷歌开源的框架mediapipe&#xff0c;里面有非常多的模型提供给我们使用&#xff0c;例如面部检测&#xff0c;身体检测&#xff0c;手部检测等。 代码需要用到opencv HandTraqckModule模块 mediapipe模块和一个音量控制模块 AndreMiras/pycaw: Python Core…

android webview 显示灰度网页

要在WebView中显示网页灰度显示&#xff0c;您可以通过以下步骤操作&#xff1a; 在您的布局文件中添加WebView组件&#xff1a; <WebViewandroid:id"id/webview"android:layout_width"match_parent"android:layout_height"match_parent" /…

手机便签中可以打勾的圆圈或小方块怎么弄?

在日常的生活和工作中&#xff0c;很多网友除了使用手机便签来记录灵感想法、读书笔记、各种琐事、工作事项外&#xff0c;还会用它来记录一些清单&#xff0c;例如待办事项清单、读书清单、购物清单、旅行必备物品清单等。 在按照记录的清单内容来执行的时候&#xff0c;为了…