HarmonyOS鸿蒙Next中OH_Pixelmap_InitializationOptions的几个参数设置问题

HarmonyOS鸿蒙Next中OH_Pixelmap_InitializationOptions的几个参数设置问题 OH_PixelmapInitializationOptions_SetSrcPixelFormat()OH_PixelmapInitializationOptions_SetPixelFormat() 有什么区别?

当使用 api 创建 pixelmap Image_ErrorCode OH_PixelmapNative_CreatePixelmap(uint8_t *data, size_t dataLength, OH_Pixelmap_InitializationOptions *options, OH_PixelmapNative **pixelmap) 时,已知 data 的像素格式是 NV12,以及步长和 padding 相关信息,如何设置 OH_Pixelmap_InitializationOptions 的相关参数


更多关于HarmonyOS鸿蒙Next中OH_Pixelmap_InitializationOptions的几个参数设置问题的实战教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复

OH_Pixelmap_InitializationOptions结构体

OH_Pixelmap_InitializationOptions结构体用于配置像素图的初始化参数。主要参数包括:

  1. size:结构体大小,通常使用sizeof(OH_Pixelmap_InitializationOptions)
  2. pixelFormat:像素格式,如OH_PixelmapFormat::RGBA_8888
  3. widthheight:像素图的宽高。
  4. editable:布尔值,决定像素图是否可编辑。
  5. alphaType:透明度类型,如OH_AlphaType::IMAGE_ALPHA_TYPE_PREMUL
  6. scaleMode:缩放模式,如OH_ScaleMode::FIT_TARGET_SIZE

设置时需确保参数值有效且符合图像处理需求。

更多关于HarmonyOS鸿蒙Next中OH_Pixelmap_InitializationOptions的几个参数设置问题的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS Next中,OH_PixelmapInitializationOptions_SetSrcPixelFormatOH_PixelmapInitializationOptions_SetPixelFormat 的区别如下:

  • OH_PixelmapInitializationOptions_SetSrcPixelFormat:设置原始数据的像素格式。这指的是你传入的 data 缓冲区的实际编码格式。
  • OH_PixelmapInitializationOptions_SetPixelFormat:设置目标Pixelmap的像素格式。这是你希望 OH_PixelmapNative 对象内部存储或最终呈现的格式。

简单来说,SrcPixelFormat 描述输入数据的“样子”,PixelFormat 定义输出Pixelmap的“样子”。如果两者不同,系统在创建Pixelmap时会进行格式转换。

针对你的具体场景,已知 data 为NV12格式,创建Pixelmap的参数设置步骤如下:

  1. 设置源格式:必须调用 OH_PixelmapInitializationOptions_SetSrcPixelFormat(options, NV12)。这告诉API原始数据是NV12(YUV半平面格式)。

  2. 设置目标格式

    • 如果你希望Pixelmap保持NV12格式(用于后续视频处理或编码),则调用 OH_PixelmapInitializationOptions_SetPixelFormat(options, NV12)
    • 如果你需要Pixelmap为RGB格式(用于UI显示或图形处理),则设置为相应的RGB格式(如 ARGB_8888RGB_888),系统会自动从NV12转换。
  3. 设置步长与尺寸

    • 使用 OH_PixelmapInitializationOptions_SetSize 设置图像的有效宽高(即图像内容尺寸)。
    • 使用 OH_PixelmapInitializationOptions_SetRowStride 设置每一行的字节步长。对于NV12,这通常是包含可能存在的内存对齐填充(padding)后的Y分量行字节数。UV分量的步长通常与Y分量相同或为Y的一半(取决于具体实现和填充)。
    • 如果数据有额外的尾部填充,确保 dataLength 参数能容纳 (行数 * 行步长) 计算出的总大小。

关键点:步长(RowStride)应 ≥ (图像宽度 * 每像素字节数)。对于NV12的Y平面,每像素1字节,所以步长应 ≥ 宽度。UV平面交错存储,其步长通常与Y平面相同。

示例设置逻辑(假设目标仍为NV12):

// 假设 width, height, yStride 已知,data 为 NV12 数据
OH_Pixelmap_InitializationOptions* options = OH_Pixelmap_InitializationOptions_Create();
OH_PixelmapInitializationOptions_SetSrcPixelFormat(options, NV12);
OH_PixelmapInitializationOptions_SetPixelFormat(options, NV12); // 或目标RGB格式
OH_PixelmapInitializationOptions_SetSize(options, width, height);
OH_PixelmapInitializationOptions_SetRowStride(options, yStride); // 设置Y分量的步长

// 然后调用 OH_PixelmapNative_CreatePixelmap
OH_PixelmapNative* pixelmap = nullptr;
Image_ErrorCode err = OH_PixelmapNative_CreatePixelmap(data, dataLength, options, &pixelmap);

这样即可正确配置NV12数据的Pixelmap创建参数。

回到顶部