1# 使用Image_NativeModule完成位图操作 2 3创建位图,获取位图的宽、高、pixelFormat、alphaType、rowStride信息、对位图进行操作以及释放位图实例。 4 5## 开发步骤 6 7### 添加链接库 8 9在进行应用开发之前,开发者需要打开native工程的src/main/cpp/CMakeLists.txt,在target_link_libraries依赖中添加libpixelmap.so以及日志依赖libhilog_ndk.z.so。 10 11```txt 12target_link_libraries(entry PUBLIC libhilog_ndk.z.so libpixelmap.so) 13``` 14 15### Native接口调用 16 17具体接口说明请参考[API文档](../../reference/apis-image-kit/_image___native_module.md)。 18 19在hello.cpp中实现C API接口调用逻辑,示例代码如下: 20 21**位图接口使用示例** 22 23在初始化参数后创建Pixelmap实例,进行图片像素数据的读写,对图片进行缩放、位置变换、反转、旋转、裁剪等操作。 24 25 ```c++ 26 27 #include <linux/kd.h> 28 #include <string> 29 30 #include <hilog/log.h> 31 #include <multimedia/image_framework/image/pixelmap_native.h> 32 33 #undef LOG_DOMAIN 34 #undef LOG_TAG 35 #define LOG_DOMAIN 0x3200 36 #define LOG_TAG "MY_TAG" 37 38 Image_ErrorCode PixelmapTest() 39 { 40 uint8_t data[96]; 41 size_t dataSize = 96; 42 for (int i = 0; i < dataSize; i++) { 43 data[i] = i + 1; 44 } 45 46 //创建参数结构体实例,并设置参数 47 OH_Pixelmap_InitializationOptions *createOpts; 48 OH_PixelmapInitializationOptions_Create(&createOpts); 49 OH_PixelmapInitializationOptions_SetWidth(createOpts, 6); 50 OH_PixelmapInitializationOptions_SetHeight(createOpts, 4); 51 OH_PixelmapInitializationOptions_SetPixelFormat(createOpts, PIXEL_FORMAT_RGBA_8888); 52 OH_PixelmapInitializationOptions_SetAlphaType(createOpts, PIXELMAP_ALPHA_TYPE_UNKNOWN); 53 54 //创建Pixelmap实例 55 OH_PixelmapNative *pixelmap = nullptr; 56 Image_ErrorCode errCode = OH_PixelmapNative_CreatePixelmap(data, dataSize, createOpts, &pixelmap); 57 58 //读取图像像素数据,结果写入数组里 59 uint8_t destination[96]; 60 size_t destinationSize = 96; 61 errCode = OH_PixelmapNative_ReadPixels(pixelmap, destination, &destinationSize); 62 if (errCode != IMAGE_SUCCESS) { 63 OH_LOG_ERROR(LOG_APP, "ImagePixelmapNativeCTest pixelmapTest OH_PixelmapNative_ReadPixels failed, errCode: %{public}d.", errCode); 64 return errCode; 65 } 66 67 //读取缓冲区中的图片数据,结果写入Pixelmap中 68 uint8_t source[96]; 69 size_t sourceSize = 96; 70 for (int i = 0; i < sourceSize; i++) { 71 source[i] = i + 1; 72 } 73 errCode = OH_PixelmapNative_WritePixels(pixelmap, source, sourceSize); 74 if (errCode != IMAGE_SUCCESS) { 75 OH_LOG_ERROR(LOG_APP, "ImagePixelmapNativeCTest pixelmapTest OH_PixelmapNative_WritePixels failed, errCode: %{public}d.", errCode); 76 return errCode; 77 } 78 79 //创建图片信息实例,并获取图像像素信息 80 OH_Pixelmap_ImageInfo *imageInfo; 81 OH_PixelmapImageInfo_Create(&imageInfo); 82 errCode = OH_PixelmapNative_GetImageInfo(pixelmap, imageInfo); 83 if (errCode != IMAGE_SUCCESS) { 84 OH_LOG_ERROR(LOG_APP, "ImagePixelmapNativeCTest pixelmapTest OH_PixelmapNative_GetImageInfo failed, errCode: %{public}d.", errCode); 85 return errCode; 86 } 87 88 //获取图片的宽,高,pixel格式,透明度等信息 89 uint32_t width, height, rowStride; 90 int32_t pixelFormat, alphaType; 91 OH_PixelmapImageInfo_GetWidth(imageInfo, &width); 92 OH_PixelmapImageInfo_GetHeight(imageInfo, &height); 93 OH_PixelmapImageInfo_GetRowStride(imageInfo, &rowStride); 94 OH_PixelmapImageInfo_GetPixelFormat(imageInfo, &pixelFormat); 95 OH_PixelmapImageInfo_GetAlphaType(imageInfo, &alphaType); 96 OH_PixelmapImageInfo_Release(imageInfo); 97 OH_LOG_INFO(LOG_APP, "ImagePixelmapNativeCTest pixelmapTest GetImageInfo success, width: %{public}d, height: %{public}d, rowStride: %{public}d, pixelFormat: %{public}d, alphaType: %{public}d.", width, height, rowStride, pixelFormat, alphaType); 98 99 //设置透明比率来让Pixelap达到对应的透明效果 100 errCode = OH_PixelmapNative_Opacity(pixelmap, 0.5); 101 if (errCode != IMAGE_SUCCESS) { 102 OH_LOG_ERROR(LOG_APP, "ImagePixelmapNativeCTest pixelmapTest OH_PixelmapNative_Opacity failed, errCode: %{public}d.", errCode); 103 return errCode; 104 } 105 106 //对图片进行缩放 107 errCode = OH_PixelmapNative_Scale(pixelmap, 2.0, 1.0); 108 if (errCode != IMAGE_SUCCESS) { 109 OH_LOG_ERROR(LOG_APP, "ImagePixelmapNativeCTest pixelmapTest OH_PixelmapNative_Scale failed, errCode: %{public}d.", errCode); 110 return errCode; 111 } 112 113 //对图片进行位置变换 114 errCode = OH_PixelmapNative_Translate(pixelmap, 50.0, 10.0); 115 if (errCode != IMAGE_SUCCESS) { 116 OH_LOG_ERROR(LOG_APP, "ImagePixelmapNativeCTest pixelmapTest OH_PixelmapNative_Translate failed, errCode: %{public}d.", errCode); 117 return errCode; 118 } 119 120 //对图片进行旋转 121 errCode = OH_PixelmapNative_Rotate(pixelmap, 90.0); 122 if (errCode != IMAGE_SUCCESS) { 123 OH_LOG_ERROR(LOG_APP, "ImagePixelmapNativeCTest pixelmapTest OH_PixelmapNative_Rotate failed, errCode: %{public}d.", errCode); 124 return errCode; 125 } 126 127 //对图片进行翻转 128 errCode = OH_PixelmapNative_Flip(pixelmap, true, true); 129 if (errCode != IMAGE_SUCCESS) { 130 OH_LOG_ERROR(LOG_APP, "ImagePixelmapNativeCTest pixelmapTest OH_PixelmapNative_Flip failed, errCode: %{public}d.", errCode); 131 return errCode; 132 } 133 134 //对图片进行裁剪 135 Image_Region region; 136 region.x = 100; 137 region.y = 100; 138 region.width = 6; 139 region.height = 4; 140 errCode = OH_PixelmapNative_Crop(pixelmap, ®ion); 141 if (errCode != IMAGE_SUCCESS) { 142 OH_LOG_ERROR(LOG_APP, "ImagePixelmapNativeCTest pixelmapTest OH_PixelmapNative_Crop failed, errCode: %{public}d.", errCode); 143 return errCode; 144 } 145 146 //释放Pixelmap, InitializationOptions实例 147 OH_PixelmapNative_Release(pixelmap); 148 OH_PixelmapInitializationOptions_Release(createOpts); 149 return IMAGE_SUCCESS; 150 } 151 ``` 152