1# Using Image_NativeModule to Process Image Information 2 3You can use the **ImageInfo** class to set and read the rectangle size, component information, and pixel information of an image. 4 5## How to Develop 6 7### Adding Dependencies 8 9Open the **src/main/cpp/CMakeLists.txt** file of the native project, add **libohimage.so**, **libimage_receiver.so**, **libnative_image.so**, and **libhilog_ndk.z.so** (on which the log APIs depend) to the **target_link_libraries** dependency. 10 11```txt 12target_link_libraries(entry PUBLIC libhilog_ndk.z.so libohimage.so libimage_receiver.so libnative_image.so) 13``` 14 15### Calling the Native APIs 16 17For details about the APIs, see [Image_NativeModule](../../reference/apis-image-kit/_image___native_module.md). 18 19Implement the C native APIs in **hello.cpp**. Refer to the sample code below. 20 21```c++ 22#include <hilog/log.h> 23#include <multimedia/image_framework/image/image_native.h> 24#include <multimedia/image_framework/image/image_receiver_native.h> 25 26#undef LOG_DOMAIN 27#define LOG_DOMAIN 0x3200 28 29#undef LOG_TAG 30#define LOG_TAG "MY_TAG" 31 32#define IMAGE_WIDTH 320 33#define IMAGE_HEIGHT 480 34#define IMAGE_CAPACITY 2 35 36static void ImageNativeCTest() 37{ 38 // Create an OH_ImageReceiverOptions instance. 39 OH_ImageReceiverOptions* options = nullptr; 40 Image_ErrorCode errCode = OH_ImageReceiverOptions_Create(&options); 41 if (errCode != IMAGE_SUCCESS) { 42 OH_LOG_ERROR(LOG_APP, "ImageReceiverNativeCTest create image receiver options failed, errCode: %{public}d.", errCode); 43 return; 44 } 45 46 Image_Size imgSize; 47 imgSize.width = IMAGE_WIDTH; 48 imgSize.height = IMAGE_HEIGHT; 49 50 // Set the size attribute of OH_ImageReceiverOptions. 51 errCode = OH_ImageReceiverOptions_SetSize(options, imgSize); 52 if (errCode != IMAGE_SUCCESS) { 53 OH_LOG_ERROR(LOG_APP, "ImageReceiverNativeCTest set image receiver options size failed, errCode: %{public}d.", errCode); 54 OH_ImageReceiverOptions_Release(options); 55 return; 56 } 57 58 // Set the capacity attribute of OH_ImageReceiverOptions. 59 errCode = OH_ImageReceiverOptions_SetCapacity(options, IMAGE_CAPACITY); 60 if (errCode != IMAGE_SUCCESS) { 61 OH_LOG_ERROR(LOG_APP, "ImageReceiverNativeCTest set image receiver options capacity failed, errCode: %{public}d.", errCode); 62 OH_ImageReceiverOptions_Release(options); 63 return; 64 } 65 66 // Create an OH_ImageReceiverNative instance. 67 OH_ImageReceiverNative* receiver = nullptr; 68 errCode = OH_ImageReceiverNative_Create(options, &receiver); 69 if (errCode != IMAGE_SUCCESS) { 70 OH_LOG_ERROR(LOG_APP, "ImageReceiverNativeCTest create image receiver failed, errCode: %{public}d.", errCode); 71 OH_ImageReceiverOptions_Release(options); 72 return; 73 } 74 75 // Read the next image object of OH_ImageReceiverNative. 76 OH_ImageNative* image = nullptr; 77 errCode = OH_ImageReceiverNative_ReadNextImage(receiver, &image); 78 if (errCode != IMAGE_SUCCESS) { 79 OH_LOG_ERROR(LOG_APP, "ImageReceiverNativeCTest get image receiver next image failed, errCode: %{public}d.", errCode); 80 OH_ImageReceiverOptions_Release(options);OH_ImageReceiverNative_Release(receiver); 81 return; 82 } 83 84 // Read the size attribute of OH_ImageNative. 85 errCode = OH_ImageNative_GetImageSize(image, &imgSizeRead); 86 if (errCode != IMAGE_SUCCESS) { 87 OH_LOG_ERROR(LOG_APP, "ImageReceiverNativeCTest get image size failed, errCode: %{public}d.", errCode); 88 OH_ImageNative_Release(image); 89 OH_ImageReceiverOptions_Release(options);OH_ImageReceiverNative_Release(receiver); 90 return; 91 } 92 93 // Read the number of elements in the component list of OH_ImageNative. 94 size_t componentTypeSize = 0; 95 errCode = OH_ImageNative_GetComponentTypes(image, nullptr, &componentTypeSize); 96 if (errCode != IMAGE_SUCCESS) { 97 OH_LOG_ERROR(LOG_APP, "ImageReceiverNativeCTest get image component types failed, errCode: %{public}d.", errCode); 98 OH_ImageNative_Release(image); 99 OH_ImageReceiverOptions_Release(options);OH_ImageReceiverNative_Release(receiver); 100 return; 101 } 102 103 // Read the component list of OH_ImageNative. 104 uint32_t* components = new uint32_t[componentTypeSize]; 105 errCode = OH_ImageNative_GetComponentTypes(image, &components, &componentTypeSize); 106 if (errCode != IMAGE_SUCCESS) { 107 OH_LOG_ERROR(LOG_APP, "ImageReceiverNativeCTest get image component types failed, errCode: %{public}d.", errCode); 108 delete [] components; 109 OH_ImageNative_Release(image); 110 OH_ImageReceiverOptions_Release(options);OH_ImageReceiverNative_Release(receiver); 111 return; 112 } 113 114 delete [] components; 115 116 // Read the buffer object corresponding to the first component of OH_ImageNative. 117 OH_NativeBuffer* nativeBuffer = nullptr; 118 errCode = OH_ImageNative_GetByteBuffer(image, components[0], &nativeBuffer); 119 if (errCode != IMAGE_SUCCESS) { 120 OH_LOG_ERROR(LOG_APP, "ImageReceiverNativeCTest get image byte buffer failed, errCode: %{public}d.", errCode); 121 OH_ImageNative_Release(image); 122 OH_ImageReceiverOptions_Release(options);OH_ImageReceiverNative_Release(receiver); 123 return; 124 } 125 126 // Read the size of the buffer corresponding to the first component of OH_ImageNative. 127 size_t nativeBufferSize = 0; 128 errCode = OH_ImageNative_GetBufferSize(image, components[0], &nativeBufferSize); 129 if (errCode != IMAGE_SUCCESS) { 130 OH_LOG_ERROR(LOG_APP, "ImageReceiverNativeCTest get image buffer size failed, errCode: %{public}d.", errCode); 131 OH_ImageNative_Release(image); 132 OH_ImageReceiverOptions_Release(options);OH_ImageReceiverNative_Release(receiver); 133 return; 134 } 135 136 // Read the row stride corresponding to the first component of OH_ImageNative. 137 int32_t rowStride = 0; 138 errCode = OH_ImageNative_GetRowStride(image, components[0], &rowStride); 139 if (errCode != IMAGE_SUCCESS) { 140 OH_LOG_ERROR(LOG_APP, "ImageReceiverNativeCTest get image row stride failed, errCode: %{public}d.", errCode); 141 OH_ImageNative_Release(image); 142 OH_ImageReceiverOptions_Release(options);OH_ImageReceiverNative_Release(receiver); 143 return; 144 } 145 146 // Read the pixel stride corresponding to the first component of OH_ImageNative. 147 int32_t pixelStride = 0; 148 errCode = OH_ImageNative_GetPixelStride(image, components[0], &pixelStride); 149 if (errCode != IMAGE_SUCCESS) { 150 OH_LOG_ERROR(LOG_APP, "ImageReceiverNativeCTest get image pixel stride failed, errCode: %{public}d.", errCode); 151 OH_ImageNative_Release(image); 152 OH_ImageReceiverOptions_Release(options);OH_ImageReceiverNative_Release(receiver); 153 return; 154 } 155 156 // Read the timestamp of the OH_ImageNative instance. 157 int64_t timestamp = 0; 158 errCode = OH_ImageNative_GetTimestamp(image, ×tamp); 159 if (errCode != IMAGE_SUCCESS) { 160 OH_LOG_ERROR(LOG_APP, "ImageReceiverNativeCTest get timestamp failed, errCode: %{public}d.", errCode); 161 OH_ImageNative_Release(image); 162 OH_ImageReceiverOptions_Release(options); 163 OH_ImageReceiverNative_Release(receiver); 164 return; 165 } 166 167 // Release the OH_ImageNative instance. 168 errCode = OH_ImageNative_Release(image); 169 if (errCode != IMAGE_SUCCESS) { 170 OH_LOG_ERROR(LOG_APP, "ImageReceiverNativeCTest release image native failed, errCode: %{public}d.", errCode); 171 } 172 173 // Release the OH_ImageReceiverOptions instance. 174 errCode = OH_ImageReceiverOptions_Release(options); 175 if (errCode != IMAGE_SUCCESS) { 176 OH_LOG_ERROR(LOG_APP, "ImageReceiverNativeCTest release image receiver options failed, errCode: %{public}d.", errCode); 177 } 178 179 // Release the OH_ImageReceiverOptions instance. 180 errCode = OH_ImageReceiverNative_Release(receiver); 181 if (errCode != IMAGE_SUCCESS) { 182 OH_LOG_ERROR(LOG_APP, "ImageReceiverNativeCTest release image receiver failed, errCode: %{public}d.", errCode); 183 } 184} 185``` 186