HarmonyOS学习路之开发篇—多媒体开发(图像开发 二)

简介: 图像编码就是将PixelMap图像编码成不同存档格式图片,用于后续其他处理,比如保存、传输等。当前仅支持JPEG格式。

图像编码开发

场景介绍

图像编码就是将PixelMap图像编码成不同存档格式图片,用于后续其他处理,比如保存、传输等。当前仅支持JPEG格式。


接口说明

ImagePacker主要用于图像编码。



image.png



开发步骤

1. 创建图像编码ImagePacker对象

ImagePacker imagePacker = ImagePacker.create();

2. 设置编码输出流和编码参数。设置format为编码的图像格式,当前支持jpeg格式。设置quality为图像质量,范围从0-100,100为最佳质量

// 传入本地图片路径,图片格式需要与packingOptions.format相对应
FileOutputStream outputStream = null;
try {
    outputStream = new FileOutputStream("/path/to/packed.file");
} catch (FileNotFoundException e) {
    e.printStackTrace();
}
ImagePacker.PackingOptions packingOptions = new ImagePacker.PackingOptions();
packingOptions.format = "image/jpeg";
packingOptions.quality = 90;
boolean result = imagePacker.initializePacking(outputStream, packingOptions);

3. 添加需要编码的PixelMap对象,进行编码操作


result = imagePacker.addImage(pixelMap);
long dataSize = imagePacker.finalizePacking();

4. 编码输出完成后,可以进行后续处理,比如保存、传输等。


5. 释放创建的ImagePacker


imagePacker.release();

位图操作开发

场景介绍

位图操作就是指对PixelMap图像进行相关的操作,比如创建、查询信息、读写像素数据等。


接口说明

image.png

image.png


开发步骤

1. 创建位图对象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 pixelMap = PixelMap.create(defaultColors, initializationOptions);
// 指定初始化选项创建
PixelMap pixelMap2 = PixelMap.create(initializationOptions);
// 以另外一个PixelMap作为数据源创建
PixelMap pixelMap3 = PixelMap.create(pixelMap2, initializationOptions);

2. 从位图对象中获取信息


long capacity = pixelMap.getPixelBytesCapacity();
long bytesNumber = pixelMap.getPixelBytesNumber();
int rowBytes = pixelMap.getBytesNumberPerRow();
byte[] ninePatchData = pixelMap.getNinePatchChunk();

3. 读写位图像素数据。


// 读取指定位置像素
int color = pixelMap.readPixel(new Position(1, 1));
// 读取指定区域像素
int[] pixelArray = new int[50];
Rect region = new Rect(0, 0, 2, 2);
pixelMap.readPixels(pixelArray, 0, 10, region);
// 读取像素到Buffer
IntBuffer pixelBuf = IntBuffer.allocate(50);
pixelMap.readPixels(pixelBuf);
// 在指定位置写入像素
pixelMap.writePixel(new Position(1, 1), 0xFF112233);
// 在指定区域写入像素
pixelMap.writePixels(pixelArray, 0, 10, region);
// 写入Buffer中的像素
pixelMap.writePixels(pixelBuf);


图像属性解码开发

场景介绍

图像属性解码就是获取图像中包含的属性信息,比如EXIF属性。


接口说明

图像属性解码的功能主要由ImageSource和ExifUtils提供。


ImageSource的主要接口


image.png


ExifUtils的主要接口


image.png


开发步骤

1. 创建图像数据源ImageSource对象,可以通过SourceOptions指定数据源的格式信息,此格式信息仅为给解码器的提示,正确提供能帮助提高解码效率,如果不设置或设置不正确,会自动检测正确的图像格式。

ImageSource.SourceOptions srcOpts = new ImageSource.SourceOptions();
srcOpts.formatHint = "image/jpeg";
// 此处传入用户自定义的带缩略图的图像路径
String pathName = "/sdcard/image.jpg";
ImageSource imageSource = ImageSource.create(pathName, srcOpts);

2. 获取缩略图信息


int format = imageSource.getThumbnailFormat();
byte[] thumbnailBytes = imageSource.getImageThumbnailBytes();
// 将缩略图解码为PixelMap对象
ImageSource.DecodingOptions decodingOpts = new ImageSource.DecodingOptions();
PixelMap thumbnailPixelmap = imageSource.createThumbnailPixelmap(decodingOpts, false);
相关文章
|
4天前
|
人工智能 自然语言处理 开发者
HarmonyOS NEXT~鸿蒙开发利器:CodeGenie AI辅助编程工具全面解析
鸿蒙开发迎来新利器!DevEco CodeGenie 是华为推出的 AI 辅助编程工具,专为 HarmonyOS NEXT 开发者设计。它具备智能代码生成(支持 ArkTS 和 C++)、精准知识问答以及万能卡片生成三大核心功能,大幅提升编码效率。通过与 DeepSeek 深度整合,CodeGenie 实现流畅的问答体验,帮助开发者解决技术难题。无论是新手还是资深开发者,都能从中受益,享受更智能高效的开发过程。快来体验吧!
33 5
|
13天前
|
安全 索引
鸿蒙开发:如何更新对象数组
关于对象数组中的数据更新,目前例举了三种方式,一种是传统的装饰器方式,另外两种是针对数据源进行操作,数据源直接赋值的方式,适合简单、高频的单元素修改,性能最优且类型安全,而splice方法适合复杂操作或需保持引用稳定的场景,但需注意性能损耗,在实际的开发中可以根据需求,选择自己适合的方式。
81 34
|
10天前
|
JavaScript 安全 开发者
鸿蒙开发:如何解决软键盘弹出后的间距
三种方式,比较推荐方式一,简单便捷,一行代码便可以搞定,当然,另外两种也是实现的办法,在实际的开发中,选择适合的即可。
41 14
鸿蒙开发:如何解决软键盘弹出后的间距
|
4天前
|
搜索推荐 调度
鸿蒙开发中对want的深入理解,want和uiability的关系-深度理解want的意思有利开发-优雅草卓伊凡
鸿蒙开发中对want的深入理解,want和uiability的关系-深度理解want的意思有利开发-优雅草卓伊凡
24 2
鸿蒙开发中对want的深入理解,want和uiability的关系-深度理解want的意思有利开发-优雅草卓伊凡
|
25天前
|
人工智能 前端开发 物联网
【05】20250416优雅草星云物联网AI智控系统从0开发鸿蒙端适配-deveco studio-增加告警中心相关卡片页面WarningCardWidget相关-增加Canvas 绘制折线图-Canvas 绘制柱状图-首页-优雅草卓伊凡
【05】20250416优雅草星云物联网AI智控系统从0开发鸿蒙端适配-deveco studio-增加告警中心相关卡片页面WarningCardWidget相关-增加Canvas 绘制折线图-Canvas 绘制柱状图-首页-优雅草卓伊凡
40 0
【05】20250416优雅草星云物联网AI智控系统从0开发鸿蒙端适配-deveco studio-增加告警中心相关卡片页面WarningCardWidget相关-增加Canvas 绘制折线图-Canvas 绘制柱状图-首页-优雅草卓伊凡
|
1月前
|
缓存 开发工具 开发者
鸿蒙NEXT开发App相关工具类(ArkTs)
这段代码展示了一个名为鸿蒙NEXT开发 `AppUtil` 的工具类,主要用于管理鸿蒙应用的上下文、窗口、状态栏、导航栏等配置。它提供了多种功能,例如设置灰阶模式、颜色模式、字体类型、屏幕亮度、窗口属性等,并支持获取应用包信息(如版本号、包名等)。该工具类需在 UIAbility 的 `onWindowStageCreate` 方法中初始化,以便缓存全局变量。代码由鸿蒙布道师编写,适用于鸿蒙系统应用开发,帮助开发者更便捷地管理和配置应用界面及系统属性。
|
19天前
|
安全 前端开发 Android开发
拥抱国产化:转转APP的鸿蒙NEXT端开发尝鲜之旅
本文将要分享的是转转APP在开发全新鸿蒙NEXT端所遇到的一些问题,对比了鸿蒙开发和 Android、iOS 的不同,总结了这次开发过程中的一些经验等等。希望能带给你启发。
36 0
|
2月前
|
前端开发
鸿蒙开发:使用Rect绘制矩形
几何矩形,在实际的开发中,有多种的实现方式,并非一定需要Rect组件,但是,如果有需要用到矩形的场景,建议还是使用Rect组件,因为Rect组件自身携带了很多样式属性,可以满足我们日常的不同的需求。
鸿蒙开发:使用Rect绘制矩形
|
1月前
|
人工智能 物联网 Android开发
【04】优雅草星云物联网AI智控系统从0开发鸿蒙端适配-deveco studio-自定义一个设置输入小部件组件-完成所有设置setting相关的页面-优雅草卓伊凡
【04】优雅草星云物联网AI智控系统从0开发鸿蒙端适配-deveco studio-自定义一个设置输入小部件组件-完成所有设置setting相关的页面-优雅草卓伊凡
167 92
|
1月前
|
人工智能 物联网 Android开发
【03】优雅草星云物联网AI智控系统从0开发鸿蒙端适配-deveco studio-在lib目录新建自定义库UtilsLibrary,ComponentLibrary,CommonConstLibrary完成设置SettingsView.ets初始公共类书写-优雅草卓伊凡
【03】优雅草星云物联网AI智控系统从0开发鸿蒙端适配-deveco studio-在lib目录新建自定义库UtilsLibrary,ComponentLibrary,CommonConstLibrary完成设置SettingsView.ets初始公共类书写-优雅草卓伊凡
81 23
【03】优雅草星云物联网AI智控系统从0开发鸿蒙端适配-deveco studio-在lib目录新建自定义库UtilsLibrary,ComponentLibrary,CommonConstLibrary完成设置SettingsView.ets初始公共类书写-优雅草卓伊凡