logo资料库

5-1.【Codelab】HarmonyOS基于图像模块实现图库图片的四种常见操作.pdf

第1页 / 共10页
第2页 / 共10页
第3页 / 共10页
第4页 / 共10页
第5页 / 共10页
第6页 / 共10页
第7页 / 共10页
第8页 / 共10页
资料共10页,剩余部分请下载后查看
【Codelab】HarmonyOS 基于图像模块实现图库图片的 四种常见操作 本期我们将为大家带来最常见的图像业务开发。 官网链接: https://developer.harmonyos.com/cn/docs/documentation/doc-guides/cookbook- image-processing-0000001089174695 在 HarmonyOS 中,由图像模块支持图像业务的开发,常见功能如图像解码、图像编码、 基本的位图操作、图像编辑等。当然,开发者也可以通过接口组合来实现更复杂的图像处理 逻辑。 在这个教程中,我们将以图库图片中旋转、剪裁、缩放、镜像四种常见操作为例,给大家介 绍 HarmonyOS 图像编解码的相关开发指导。 在 HUAWEI DevEco Studio 创建一个 Phone 的 Empty Feature Ability(Java)模板工程, 我们将在这个模板中完成操作。 我们需要先准备一张 1024*768 的 JPG 格式图片作为示例,放在我们创建的手机工程项目 中的 entry/src/main/resources/base/media 目录下。 来源:HarmonyOS 开发者微信号 https://mp.weixin.qq.com/s/bd2T4KUBNShmwJf7w3G0Cw
1、将图片转换为 PixelMap 对象 为了便于后续图片显示及处理,我们需要对图片进行解码处理。图像解码就是将所支持格式 的存档图片解码成统一的 PixelMap 图像。当前 HarmonyOS 支持的图片格式包括 JPEG、 PNG、GIF、HEIF、WebP、BMP。 这个例子中我们提供的是 getPixelMapFromResource 函数,可以将已经存放在相关目录 下的图片资源转换为 PixelMap 图像,其中入参为图片的资源 ID, 示例代码如下: private PixelMap getPixelMapFromResource(int resourceId) { InputStream inputStream = null; 来源:HarmonyOS 开发者微信号 https://mp.weixin.qq.com/s/bd2T4KUBNShmwJf7w3G0Cw
try { // 创建图像数据源 ImageSource 对象 inputStream = getContext().getResourceManager().getResource(resourceId); ImageSource.SourceOptions srcOpts = new ImageSource.SourceOptions(); srcOpts.formatHint = "image/jpg"; ImageSource imageSource = ImageSource.create(inputStream, srcOpts); // 设置图片参数 ImageSource.DecodingOptions decodingOptions = new ImageSource.DecodingOptions(); return imageSource.createPixelmap(decodingOptions); } catch (IOException e) { HiLog.info(LABEL_LOG, "IOException"); } catch (NotExistException e) { HiLog.info(LABEL_LOG, "NotExistException"); } finally { if (inputStream != null) { try { inputStream.close(); } catch (IOException e) { HiLog.info(LABEL_LOG, "inputStream IOException"); 来源:HarmonyOS 开发者微信号 https://mp.weixin.qq.com/s/bd2T4KUBNShmwJf7w3G0Cw
} } } return null; } 2、图片旋转、缩放、裁剪参数设置 这个步骤中,我们将对图片进行旋转,缩放,裁剪处理。本 Codelab 中的图像处理是基于 1024*768 的图像尺寸,实现如下功能: 旋转:点击一次旋转按钮将进行 90 度旋转; 缩放:点击缩放按钮将按 2:1 比例进行缩放,再次点击还原; 裁剪:点击一次裁剪按钮将在保证宽度不变的情况下对高度进行 400 像素的剪裁; 相关参数设置如下所示: // 设置图片参数 ImageSource.DecodingOptions decodingOptions = new ImageSource.DecodingOptions(); // 旋转 decodingOptions.rotateDegrees = 90 * whirlCount; // 缩放 decodingOptions.desiredSize = new Size(isScale ? 512 : 0, isScale ? 384 : 0); // 剪裁 来源:HarmonyOS 开发者微信号 https://mp.weixin.qq.com/s/bd2T4KUBNShmwJf7w3G0Cw
decodingOptions.desiredRegion = new Rect(0, 0, isCorp ? 1024 : 0, isCorp ? 400 : 0); 开发者也可根据实际需求对参数进行修改。 3、图片镜像操作处理 除了旋转、缩放、裁剪等操作,常见的图片操作处理还有镜像。所谓图片镜像,就是对图片 以纵坐标为轴制作对称图片。本例采用对图像 Canvas 画布的镜像操作实现图片的镜像显 示。 示例代码如下所示: private void mirrorImage(PixelMap pixelMap) { scaleX = -scaleX; image.addDrawTask( new Component.DrawTask() { @Override public void onDraw(Component component, Canvas canvas) { if (isMirror) { isMirror = false; PixelMapHolder pmh = new PixelMapHolder(pixelMap); canvas.scale( scaleX, 1.0f, (float) pixelMap.getImageInfo().size.width / 2, 来源:HarmonyOS 开发者微信号 https://mp.weixin.qq.com/s/bd2T4KUBNShmwJf7w3G0Cw
(float) pixelMap.getImageInfo().size.height / 2); canvas.drawPixelMapHolder( pmh, 0, 0, new Paint()); } } }); } 4、创建界面基础组件 这个部分主要针对我们需要展示的界面文本和按钮进行创建,我们需要创建的内容有界面标 题文本——“HarmonyOS 图像开发”,四个对应不同图片处理的按钮——“旋转”、“裁 剪”、“缩放”、“镜像”。 标题文本创建:
ohos:text_size="80" ohos:top_margin="40vp" /> “旋转”按钮绘制: “裁剪”按钮绘制: “缩放”按钮绘制:
分享到:
收藏