HarmonyOS之深入解析图像的位图操作和属性解码
一、位图操作
① 应用场景
- 位图操作就是指对 PixelMap 图像进行相关的操作,比如创建、查询信息、读写像素数据等。
② 位图操作 API
- 位图操作类 PixelMap 的主要接口:
接口名 | 描述 |
---|---|
create(InitializationOptions opts) | 根据图像大小、像素格式、alpha类型等初始化选项创建PixelMap |
create(int[] colors, InitializationOptions opts) | 根据图像大小、像素格式、alpha类型等初始化选项,以像素颜色数组为数据源创建PixelMap |
create(int[] colors, int offset, int stride, InitializationOptions opts) | 根据图像大小、像素格式、alpha类型等初始化选项,以像素颜色数组、起始偏移量、行像素大小描述的数据源创建PixelMap |
create(PixelMap source, InitializationOptions opts) | 根据图像大小、像素格式、alpha类型等初始化选项,以源PixelMap为数据源创建PixelMap |
create(PixelMap source, Rect srcRegion, InitializationOptions opts) | 根据图像大小、像素格式、alpha类型等初始化选项,以源PixelMap、源裁剪区域描述的数据源创建PixelMap |
getBytesNumberPerRow() | 获取每行像素数据占用的字节数 |
getPixelBytesCapacity() | 获取存储Pixelmap像素数据的内存容量 |
isEditable() | 判断PixelMap是否允许修改 |
isSameImage(PixelMap other) | 判断两个图像是否相同,包括ImageInfo属性信息和像素数据 |
readPixel(Position pos) | 读取指定位置像素的颜色值,返回的颜色格式为PixelFormat.ARGB_8888 |
readPixels(int[] pixels, int offset, int stride, Rect region) | 读取指定区域像素的颜色值,输出到以起始偏移量、行像素大小描述的像素数组,返回的颜色格式为PixelFormat.ARGB_8888 |
readPixels(Buffer dst) | 读取像素的颜色值到缓冲区,返回的数据是PixelMap中像素数据的原样拷贝,即返回的颜色数据格式与PixelMap中像素格式一致 |
resetConfig(Size size, PixelFormat pixelFormat) | 重置PixelMap的大小和像素格式配置,但不会改变原有的像素数据也不会重新分配像素数据的内存,重置后图像数据的字节数不能超过PixelMap的内存容量 |
setAlphaType(AlphaType alphaType) | 设置PixelMap的Alpha类型 |
writePixel(Position pos, int color) | 向指定位置像素写入颜色值,写入颜色格式为PixelFormat.ARGB_8888 |
writePixels(int[] pixels, int offset, int stride, Rect region) | 将像素颜色数组、起始偏移量、行像素的个数描述的源像素数据写入PixelMap的指定区域,写入颜色格式为PixelFormat.ARGB_8888 |
writePixels(Buffer src) | 将缓冲区描述的源像素数据写入PixelMap,写入的数据将原样覆盖PixelMap中的像素数据,即写入数据的颜色格式应与PixelMap的配置兼容 |
writePixels(int color) | 将所有像素都填充为指定的颜色值,写入颜色格式为 PixelFormat.ARGB_8888 |
getPixelBytesNumber() | 获取全部像素数据包含的字节数 |
setBaseDensity(int baseDensity) | 设置PixelMap的基础像素密度值 |
getBaseDensity() | 获取PixelMap的基础像素密度值 |
setUseMipmap(boolean useMipmap) | 设置PixelMap渲染是否使用mipmap |
useMipmap() | 获取PixelMap渲染是否使用mipmap |
getNinePatchChunk() | 获取图像的NinePatchChunk数据 |
getFitDensitySize(int targetDensity) | 获取适应目标像素密度的图像缩放的尺寸 |
getImageInfo() | 获取图像基本信息 |
release() | 释放对象关联的本地资源 |
③ 位图操作流程
- 创建位图对象 PixelMap:
// 从像素颜色数组创建int[] defaultColors = new int[] {5, 5, 5, 5, 6, 6, 3, 3, 3, 0};PixelMap.InitializationOptions initializationOptions = new PixelMap.InitializationOptions();initializationOptions.size = new Size(3, 2);initializationOptions.pixelFormat = PixelFormat.ARGB_8888;initializationOptions.editable = true;PixelMap pixelMap1 = PixelMap.create(defaultColors, initializationOptions);// 指定初始化选项创建PixelMap pixelMap2 = PixelMap.create(initializationOptions);// 以另外一个PixelMap作为数据源创建PixelMap pixelMap3 = PixelMap.create(pixelMap2, initializationOptions);
- 从位图对象中获取信息:
long capacity = pixelMap.getPixelBytesCapacity();long bytesNumber = pixelMap.getPixelBytesNumber();int rowBytes = pixelMap.getBytesNumberPerRow();byte[] ninePatchData = pixelMap.getNinePatchChunk();
- 读写位图像素数据:
// 读取指定位置像素int color = pixelMap.readPixel(new Position(1, 1));// 读取指定区域像素int[] pixelArray = new int[50];Rect region = new Rect(0, 0, 10, 5);pixelMap.readPixels(pixelArray, 0, 10, region);// 读取像素到BufferIntBuffer pixelBuf = IntBuffer.allocate(50);pixelMap.readPixels(pixelBuf);// 在指定位置写入像素pixelMap.writePixel(new Position(1, 1), 0xFF112233);// 在指定区域写入像素pixelMap.writePixels(pixelArray, 0, 10, region);// 写入Buffer中的像素pixelMap.writePixels(intBuf);
二、图像属性解码
① 应用场景
- 图像属性解码就是获取图像中包含的属性信息,比如 EXIF 属性。
② 属性解码 API
- 图像属性解码的功能主要由 ImageSource 和 ExifUtils 提供。
- ImageSource 的主要接口:
接口名 | 描述 |
---|---|
getThumbnailInfo() | 获取嵌入图像文件的缩略图的基本信息 |
getImageThumbnailBytes() | 获取嵌入图像文件缩略图的原始数据 |
getThumbnailFormat() | 获取嵌入图像文件缩略图的格式 |
- ExifUtils 的主要接口:
接口名 | 描述 |
---|---|
getLatLong(ImageSource imageSource) | 获取嵌入图像文件的经纬度信息 |
getAltitude(ImageSource imageSource, double defaultValue) | 获取嵌入图像文件的海拔信息 |
③ 属性解码流程
- 创建图像数据源 ImageSource 对象,可以通过 SourceOptions 指定数据源的格式信息,此格式信息仅为给解码器的提示,正确提供能帮助提高解码效率,如果不设置或设置不正确,会自动检测正确的图像格式。
ImageSource.SourceOptions srcOpts = new ImageSource.SourceOptions();srcOpts.formatHint = "image/jpeg";String pathName = "/sdcard/image.jpg";ImageSource imageSource = ImageSource.create(pathName, srcOpts);
- 获取缩略图信息:
int format = imageSource.getThumbnailFormat();byte[] thumbnailBytes = imageSource.getImageThumbnailBytes();// 将缩略图解码为PixelMap对象ImageSource.DecodingOptions decodingOpts = new ImageSource.DecodingOptions();PixelMap thumbnailPixelmap = imageSource.createThumbnailPixelmap(decodingOpts, false);
HarmonyOS之深入解析图像的位图操作和属性解码相关推荐
- HarmonyOS之深入解析图像的编码和解码
一.基本概念 HarmonyOS 图像模块支持图像业务的开发,常见功能如图像解码.图像编码.基本的位图操作.图像编辑等.当然,也支持通过接口组合来实现更复杂的图像处理逻辑. 图像解码:图像解码就是不同 ...
- matlab 图像上下翻,Matlab图像九宫格基本操作(翻转,镜像等)+位图操作
Matlab图像九宫格基本操作(翻转,镜像等)+位图操作 Matlab图像九宫格基本操作(翻转,镜像等)+位图操作 这次blog提到的操作对于matlab来说都很基础,而且对于有编程和计算机基础的人来 ...
- MATLAB图像取点操作
%% 图像取点操作 % 读入图片 y=imread('数据.bmp'); imshow(y)%显示该图 set(gcf,'outerposition',get(0,'screensize'));%使 ...
- 游戏中的图像资源(位图与矢量图比较)
当今游戏早已不再是黑白机的时代,游戏都由色彩丰富.精致的图像,流畅的动画构成.Flash游戏也不例外,Flash既支持矢量图又支持位图,他们各有优缺点.本文的目的即是介绍何时使用矢量图,何时使用位图, ...
- MFC之学习位图操作
1.笔记 1.1位图的概念 位图是一种将显示器的图像数据不经过压缩而直接按位存储的文件格式,位图主要分为设备相关位图(device dependent bitmap,DDB),设备无关位图(devic ...
- 理解图像中卷积操作的含义
原文地址:https://blog.csdn.net/chaipp0607/article/details/72236892?locationNum=9&fps=1 上文用生动的例子来解释卷积 ...
- matlab对像素邻域操作,matlab图像的邻域操作与块操作
1.图像的滑动邻域操作. 邻域操作是指将每个输入的像素值以及其某个邻域的像素值结合处理而得到对应的输出像素值的过程.邻域通常形状规则.如2*2,2*3之类. 滑动邻域操作一次处理一个像素. 对于m*n ...
- 【iOS-Cocos2d游戏开发之二十】精灵的基础知识点总汇(位图操作/贴图更换/重排z轴等)以及利用CCSprite与CCLayerColor制作简单遮盖层!...
为什么80%的码农都做不了架构师?>>> 李华明Himi 原创,转载务必在明显处注明: 转载自 [黑米GameDev街区] 原文链接: http://www.himigam ...
- OpenCV可移植图形工具HighGUI实现图像和视频操作
OpenCV把用于操作系统.文件系统以及摄像机等硬件设备交换的函数纳入了HighGUI(High-level Graphical User Interface)模块中.有了HighGUI模块,我们可以 ...
最新文章
- 今天做项目时,用到了好多关于js的知识点,有的忘记了,然后晚上回来自己整理一番,明天继续整理。哈哈,分享给大家。...
- [Hive]Union使用指南
- 二分法在顺序排列的字典中查找单词(二分)
- [Java] java中的接口定义
- 做了几年Java开发,你必须重视这一点
- ZZULIOJ 1115: 数组最小值
- Extjs创建多个application实现多模块MVC动态加载。。
- AttributeError: 'NoneType' object has no attribute 'append'
- 用QFileDialog::getOpenFileUrls打开本地文件:指定路径
- [Python] 学习资料汇总
- css背景图片不显示原因,excel 背景图片(css设置背景图片不显示问题)
- python教程视频全套下载-Python爬虫视频教程全集下载
- python爬取图虫网图库
- Python读取并打印bin文件
- html ul 的类别,CSS 类表样式(ul)
- Solidity----状态修饰符view、pure
- [渝粤教育] 西南科技大学 电子测量与仪表 在线考试复习资料(1)
- 学习方法之——费曼技巧学习
- elasticsearch入门笔记
- idea中surround with
热门文章
- Java Web学习总结(3)Servlet(二)
- chrome浏览器被reimage pair 劫持怎么处理
- 3 - SQL Server 2008 之 使用SQL语句删除约束条件
- bzoj3715 [PA2014]Lustra
- nullnullGet previous business day
- 用串口电缆实现双机互联(图)
- 如果一个c语言float型变量被赋予初值,计算机组成原理B.doc
- java 多线程状态_总结Java中线程的状态及多线程的实现方式
- 一年中最后一个月的最后一天说说_新的一年又开始了说说 年底最后一天的心情说说...
- sql2008安装时提示参数不能为空_Java Validation API,实现参数的合法性校验