HarmonyOS鸿蒙Next中glReadPixels后的数据如何转为图片

HarmonyOS鸿蒙Next中glReadPixels后的数据如何转为图片 glReadPixels 后的数据如何转为鸿蒙系统中的图片

7 回复
  1. 将获取到的像素数据转化为鸿蒙系统中的像素数据格式。鸿蒙系统中常用的像素数据格式有ARGB_8888、RGB_565等。

  2. 创建鸿蒙系统中的Bitmap对象,并将转换后的像素数据填充到Bitmap对象中。 4. 将Bitmap对象显示到界面上。

更多关于HarmonyOS鸿蒙Next中glReadPixels后的数据如何转为图片的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


我通过 glReadPixels 从纹理拿到了 GLubyte 类型的指针数据。
然后通过 napi_create_arraybuffer 将这个指针转为了 ArrayBuffer 给到了 ts 。
最后通过 @ohos.multimedia.imagecreatePixelMap 转为 PixelMap ,显示到 image 控件中。
这样的流程对吗?
我目前遇到了 PixelMap 的图片变黄了。

很喜欢HarmonyOS的卡片式设计,信息一目了然,操作也更便捷。

你说的 Bitmap 对象是指那个包下的?

想请教一下,

基本信息
姓名: 张三
职位: 软件工程师
技能: Python, Java, C++

工作经验
2020-2022
公司名称: ABC有限公司
职位: 初级软件工程师
描述: 参与了多个项目的开发,负责后端服务的设计与实现。

在HarmonyOS鸿蒙Next中,glReadPixels用于从帧缓冲区读取像素数据。要将这些数据转换为图片,可以使用Image模块进行处理。首先,确保你已经读取了像素数据并存储在一个ArrayBuffer中。接着,使用Image模块的createImageData方法创建一个ImageData对象,将像素数据传递给它。然后,使用Image模块的encode方法将ImageData对象编码为图片格式,如PNG或JPEG。最后,将编码后的图片数据保存为文件或进行进一步处理。具体代码如下:

import image from '@ohos.multimedia.image';

// 假设你已经通过glReadPixels获取了像素数据
const pixelData = new Uint8Array(/* 你的像素数据 */);
const width = /* 图片宽度 */;
const height = /* 图片高度 */;

// 创建ImageData对象
const imageData = image.createImageData(pixelData, width, height);

// 将ImageData编码为PNG格式
const imagePacker = image.createImagePacker();
imagePacker.packing(imageData, { format: 'image/png' }).then((data) => {
  // data即为编码后的图片数据,可以保存为文件或进行其他操作
});

在HarmonyOS鸿蒙Next中,使用glReadPixels获取的像素数据可以通过以下步骤转换为图片:

  1. 获取像素数据:使用glReadPixels从帧缓冲区读取像素数据,存储在一个ByteBuffer中。

  2. 创建Bitmap对象:使用Bitmap类的createBitmap方法,传入像素数据、宽度、高度和颜色格式(如Bitmap.Config.ARGB_8888)创建一个Bitmap对象。

  3. 保存或显示图片:可以通过Bitmap.compress方法将Bitmap保存为文件,或直接用于UI显示。

示例代码:

ByteBuffer buffer = ByteBuffer.allocateDirect(width * height * 4);
glReadPixels(0, 0, width, height, GL_RGBA, GL_UNSIGNED_BYTE, buffer);
Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
bitmap.copyPixelsFromBuffer(buffer);

这样,glReadPixels的数据就被成功转换为图片。

回到顶部