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