1# 图形图像子系统ChangeLog 2 3## cl.图形图像.1 Image NDK接口OH_GetImageInfo()、OH_PixelMap_GetImageInfo()变更 4 5**访问级别** 6 7公开接口 8 9**变更原因** 10 11Jpeg图片支持硬解码,申请的内存为DMA内存,是一块对齐的内存。因此更改了OH_GetImageInfo()、OH_PixelMap_GetImageInfo()的rowSize计算方式。 12 13**变更影响** 14 15该变更为非兼容变更,NDK接口OhosPixelMapInfos和OhosPixelMapInfo的rowSize计算方式变化。 16 17**API Level** 18 19<11> 20 21**变更发生版本** 22 23从OpenHarmony SDK 4.1.3.1开始。 24 25**rowSize组件** 26 27变更前: 28 29rowSize,每行的byte数,计算方式:图片的宽 * 每个像素字节数。 30 31变更后: 32 33rowSize,每行的byte数,计算方式:DMA内存为图片的宽 * 每个像素字节数的64倍向上取整(每行末尾会自动补齐);其他内存为图片的宽 * 每个像素字节数。 34 35**适配指导** 36 37场景:通过NDK接口如OH_PixelMap_AccessPixels(),获取到pixelmap的内存地址,直接操作内存时,需要对rowSize进行适配。 38 39案例1:openCV在处理pixelmap的位图数据时需要通过pixelmap的位图数据构建openCV中的cv::Mat, 需要增加step入参, 40 41变更前: 42 43```c++ 44cv::Mat srv(rows: bitmap.height, cols: bitmap.width, type: CV_8UC4, data: imagePixels); 45``` 46 47变更后: 48 49```c++ 50cv::Mat srv(rows: bitmap.height, cols: bitmap.width, type: CV_8UC4, data: imagePixels, step: rowSize); 51``` 52 53案例2:拷贝pixelmap的位图数据,需要跳过padding区域。 54 55```c++ 56for (int i = 0; i < imageInfo_.size.height; ++i) { 57 errno_t ret = memcpy_s(dst, rowDataSize_, src_ + i * rowStride_, rowDataSize_); 58 if (ret != 0) { 59 Hilog::Error(LABLE, "read pixels by buffer memcpy the pixelmap data to dst fail, error:%{public}d", ret); 60 return ERROR_IMAGE_READ_PIXECLMAP_FAILED; 61 } 62 dst += rowDataSize_; 63} 64``` 65