图形图像子系统ChangeLog
cl.图形图像.1 Image NDK接口OH_GetImageInfo()、OH_PixelMap_GetImageInfo()变更
访问级别
公开接口
变更原因
Jpeg图片支持硬解码,申请的内存为DMA内存,是一块对齐的内存。因此更改了OH_GetImageInfo()、OH_PixelMap_GetImageInfo()的rowSize计算方式。
变更影响
该变更为非兼容变更,NDK接口OhosPixelMapInfos和OhosPixelMapInfo的rowSize计算方式变化。
API Level
<11>
变更发生版本
从OpenHarmony SDK 4.1.3.1开始。
rowSize组件
变更前:
rowSize,每行的byte数,计算方式:图片的宽 * 每个像素字节数。
变更后:
rowSize,每行的byte数,计算方式:DMA内存为图片的宽 * 每个像素字节数的64倍向上取整(每行末尾会自动补齐);其他内存为图片的宽 * 每个像素字节数。
适配指导
场景:通过NDK接口如OH_PixelMap_AccessPixels(),获取到pixelmap的内存地址,直接操作内存时,需要对rowSize进行适配。
案例1:openCV在处理pixelmap的位图数据时需要通过pixelmap的位图数据构建openCV中的cv::Mat, 需要增加step入参,
变更前:
cv::Mat srv(rows: bitmap.height, cols: bitmap.width, type: CV_8UC4, data: imagePixels);
变更后:
cv::Mat srv(rows: bitmap.height, cols: bitmap.width, type: CV_8UC4, data: imagePixels, step: rowSize);
案例2:拷贝pixelmap的位图数据,需要跳过padding区域。
for (int i = 0; i < imageInfo_.size.height; ++i) {
errno_t ret = memcpy_s(dst, rowDataSize_, src_ + i * rowStride_, rowDataSize_);
if (ret != 0) {
Hilog::Error(LABLE, "read pixels by buffer memcpy the pixelmap data to dst fail, error:%{public}d", ret);
return ERROR_IMAGE_READ_PIXECLMAP_FAILED;
}
dst += rowDataSize_;
}