harmony 鸿蒙图片绘制(ArkTS)
图片绘制(ArkTS)
位图是一种用于在内存中存储和表示图像的数据结构,它是一个未经过压缩的像素集合,而JPEG或PNG等格式的图片是压缩格式的,两者并不相同。如果需要将JPEG或PNG绘制到屏幕上,需要先解码成位图格式,具体可参考图片处理服务(Image Kit)图片解码相关章节。
目前Drawing(ArkTS)中位图绘制需要依赖PixelMap,它可以用于读取或写入图像数据以及获取图像信息。详细的API介绍请参考PixelMap。
- 创建PixelMap。
有多个API接口可以创建PixelMap,下文以createPixelMapSync()为例。更多创建方式和接口请见@ohos.multimedia.image (图片处理)模块。
createPixelMapSync()函数接受两个参数,第一个参数为图像像素数据的缓冲区,用于初始化PixelMap的像素。第二个参数为创建像素的属性,包括透明度、尺寸、缩略值、像素格式和是否可编辑。
// 图片宽高
let width = 600;
let height = 400;
// 字节长度,RGBA_8888每个像素占4字节
let byteLength = width * height * 4;
const color: ArrayBuffer = new ArrayBuffer(byteLength);
let bufferArr = new Uint8Array(color);
for (let i = 0; i < bufferArr.length; i += 4) {
// 遍历并编辑每个像素,从而形成红绿蓝相间的条纹
bufferArr[i] = 0x00;
bufferArr[i+1] = 0x00;
bufferArr[i+2] = 0x00;
bufferArr[i+3] = 0xFF;
let n = Math.floor(i / 80) % 3;
if (n == 0) {
bufferArr[i] = 0xFF;
} else if (n == 1) {
bufferArr[i+1] = 0xFF;
} else {
bufferArr[i+2] = 0xFF;
}
}
// 设置像素属性
let opts: image.InitializationOptions = { editable: true, pixelFormat: image.PixelMapFormat.RGBA_8888, size: { height: height, width: width }};
// 创建PixelMap
let pixelMap : image.PixelMap = image.createPixelMapSync(color, opts);
- (可选)编辑PixelMap中的像素。如果没有编辑像素的需求,此步骤可以省略。
有多个API接口可以编辑PixelMap中的像素,下文以writePixelsSync()为例。更多方式和接口的使用可见PixelMap。
// 设置编辑区域的宽高
let innerWidth = 400;
let innerHeight = 200;
// 编辑区域的字节长度,RGBA_8888每个像素占4字节
let innerByteLength = innerWidth * innerHeight * 4;
const innerColor: ArrayBuffer = new ArrayBuffer(innerByteLength);
let innerBufferArr = new Uint8Array(innerColor);
for (let i = 0; i < innerBufferArr.length; i += 4) {
// 编辑区域的像素都设置为黑白相间条纹
let n = Math.floor(i / 80) % 2;
if (n == 0) {
innerBufferArr[i] = 0x00;
innerBufferArr[i+1] = 0x00;
innerBufferArr[i+2] = 0x00;
} else {
innerBufferArr[i] = 0xFF;
innerBufferArr[i+1] = 0xFF;
innerBufferArr[i+2] = 0xFF;
}
innerBufferArr[i+3] = 0xFF;
}
// 设置编辑区域的像素、宽高、偏移量等
const area: image.PositionArea = {
pixels: innerColor,
offset: 0,
stride: innerWidth * 4,
region: { size: { height: innerHeight, width: innerWidth }, x: 100, y: 100 }
};
// 编辑位图,形成中间的黑白相间条纹
pixelMap.writePixelsSync(area);
- 绘制PixelMap。
绘制PixelMap时需要通过Canva相关接口绘制位图,下文以drawImage()为例。更多方式和接口的使用请见drawing.Canvas。
drawImage()函数接受4个参数,第一个就是上文中创建的PixelMap,第二个是绘制图片位置的左上角x轴坐标,第三个是左上角y轴坐标,第四个为采样选项对象,默认为不使用任何参数构造的原始采样选项对象。
canvas.drawImage(pixelMap, 0, 0);
绘制效果如下:
相关实例
针对Drawing(ArkTS)的开发,有以下相关实例可供参考:
你可能感兴趣的鸿蒙文章
harmony 鸿蒙ArkGraphics 2D(方舟2D图形服务)
harmony 鸿蒙画布的获取与绘制结果的显示(ArkTS)
0
赞
- 所属分类: 后端技术
- 本文标签:
热门推荐
-
2、 - 优质文章
-
3、 gate.io
-
8、 golang
-
9、 openharmony
-
10、 Vue中input框自动聚焦