1e41f4b71Sopenharmony_ci# Using ImageSource to Decode Images 2e41f4b71Sopenharmony_ci 3e41f4b71Sopenharmony_ciImage decoding refers to the process of decoding an archived image in a supported format into a [pixel map](image-overview.md) for image display or [processing](image-transformation.md). Currently, the following image formats are supported: JPEG, PNG, GIF, WebP, BMP, SVG, ICO, and DNG. 4e41f4b71Sopenharmony_ci 5e41f4b71Sopenharmony_ci## How to Develop 6e41f4b71Sopenharmony_ci 7e41f4b71Sopenharmony_ciRead [Image](../../reference/apis-image-kit/js-apis-image.md#imagesource) for APIs related to image decoding. 8e41f4b71Sopenharmony_ci 9e41f4b71Sopenharmony_ci1. Import the image module. 10e41f4b71Sopenharmony_ci 11e41f4b71Sopenharmony_ci ```ts 12e41f4b71Sopenharmony_ci import { image } from '@kit.ImageKit'; 13e41f4b71Sopenharmony_ci ``` 14e41f4b71Sopenharmony_ci 15e41f4b71Sopenharmony_ci2. Obtain an image. 16e41f4b71Sopenharmony_ci - Method 1: Obtain the sandbox path. For details about how to obtain the sandbox path, see [Obtaining Application File Paths](../../application-models/application-context-stage.md#obtaining-application-file-paths). For details about the application sandbox and how to push files to the application sandbox directory, see [File Management](../../file-management/app-sandbox-directory.md). 17e41f4b71Sopenharmony_ci 18e41f4b71Sopenharmony_ci ```ts 19e41f4b71Sopenharmony_ci // Code on the stage model 20e41f4b71Sopenharmony_ci const context : Context = getContext(this); 21e41f4b71Sopenharmony_ci const filePath : string = context.cacheDir + '/test.jpg'; 22e41f4b71Sopenharmony_ci ``` 23e41f4b71Sopenharmony_ci 24e41f4b71Sopenharmony_ci ```ts 25e41f4b71Sopenharmony_ci // Code on the FA model 26e41f4b71Sopenharmony_ci import { featureAbility } from '@kit.AbilityKit'; 27e41f4b71Sopenharmony_ci 28e41f4b71Sopenharmony_ci const context = featureAbility.getContext(); 29e41f4b71Sopenharmony_ci const filePath = context.getCacheDir() + "/test.jpg"; 30e41f4b71Sopenharmony_ci ``` 31e41f4b71Sopenharmony_ci 32e41f4b71Sopenharmony_ci - Method 2: Obtain the file descriptor of the image through the sandbox path. For details, see [file.fs API Reference](../../reference/apis-core-file-kit/js-apis-file-fs.md). 33e41f4b71Sopenharmony_ci To use this method, you must import the \@kit.CoreFileKit module first. 34e41f4b71Sopenharmony_ci 35e41f4b71Sopenharmony_ci ```ts 36e41f4b71Sopenharmony_ci import { fileIo } from '@kit.CoreFileKit'; 37e41f4b71Sopenharmony_ci ``` 38e41f4b71Sopenharmony_ci 39e41f4b71Sopenharmony_ci Then call **fileIo.openSync()** to obtain the file descriptor. 40e41f4b71Sopenharmony_ci 41e41f4b71Sopenharmony_ci ```ts 42e41f4b71Sopenharmony_ci // Code on the stage model 43e41f4b71Sopenharmony_ci const context = getContext(this); 44e41f4b71Sopenharmony_ci const filePath = context.cacheDir + '/test.jpg'; 45e41f4b71Sopenharmony_ci const file : fileIo.File = fileIo.openSync(filePath, fileIo.OpenMode.READ_WRITE); 46e41f4b71Sopenharmony_ci const fd : number = file?.fd; 47e41f4b71Sopenharmony_ci ``` 48e41f4b71Sopenharmony_ci 49e41f4b71Sopenharmony_ci ```ts 50e41f4b71Sopenharmony_ci // Code on the FA model 51e41f4b71Sopenharmony_ci import { featureAbility } from '@kit.AbilityKit'; 52e41f4b71Sopenharmony_ci 53e41f4b71Sopenharmony_ci const context = featureAbility.getContext(); 54e41f4b71Sopenharmony_ci const filePath = context.getCacheDir() + "/test.jpg"; 55e41f4b71Sopenharmony_ci const file : fs.File = fs.openSync(filePath, fs.OpenMode.READ_WRITE); 56e41f4b71Sopenharmony_ci const fd : number = file?.fd; 57e41f4b71Sopenharmony_ci ``` 58e41f4b71Sopenharmony_ci 59e41f4b71Sopenharmony_ci - Method 3: Obtain the array buffer of the resource file through the resource manager. For details, see [ResourceManager API Reference](../../reference/apis-localization-kit/js-apis-resource-manager.md#getrawfilecontent9-1). 60e41f4b71Sopenharmony_ci 61e41f4b71Sopenharmony_ci ```ts 62e41f4b71Sopenharmony_ci // Code on the stage model 63e41f4b71Sopenharmony_ci const context : Context = getContext(this); 64e41f4b71Sopenharmony_ci // Obtain a resource manager. 65e41f4b71Sopenharmony_ci const resourceMgr : resourceManager.ResourceManager = context.resourceManager; 66e41f4b71Sopenharmony_ci ``` 67e41f4b71Sopenharmony_ci 68e41f4b71Sopenharmony_ci ```ts 69e41f4b71Sopenharmony_ci // Code on the FA model 70e41f4b71Sopenharmony_ci // Import the resourceManager module. 71e41f4b71Sopenharmony_ci import { resourceManager } from '@kit.LocalizationKit'; 72e41f4b71Sopenharmony_ci import { BusinessError } from '@kit.BasicServicesKit'; 73e41f4b71Sopenharmony_ci resourceManager.getResourceManager().then((resourceMgr : resourceManager.ResourceManager) => { 74e41f4b71Sopenharmony_ci console.log("Succeeded in getting resourceManager") 75e41f4b71Sopenharmony_ci }).catch((err : BusinessError) => { 76e41f4b71Sopenharmony_ci console.error("Failed to get resourceManager") 77e41f4b71Sopenharmony_ci }); 78e41f4b71Sopenharmony_ci ``` 79e41f4b71Sopenharmony_ci 80e41f4b71Sopenharmony_ci The method of obtaining the resource manager varies according to the application model. After obtaining the resource manager, call **resourceMgr.getRawFileContent()** to obtain the array buffer of the resource file. 81e41f4b71Sopenharmony_ci 82e41f4b71Sopenharmony_ci ```ts 83e41f4b71Sopenharmony_ci resourceMgr.getRawFileContent('test.jpg').then((fileData : Uint8Array) => { 84e41f4b71Sopenharmony_ci console.log("Succeeded in getting RawFileContent") 85e41f4b71Sopenharmony_ci // Obtain the array buffer of the image. 86e41f4b71Sopenharmony_ci const buffer = fileData.buffer.slice(0); 87e41f4b71Sopenharmony_ci }).catch((err : BusinessError) => { 88e41f4b71Sopenharmony_ci console.error("Failed to get RawFileContent") 89e41f4b71Sopenharmony_ci }); 90e41f4b71Sopenharmony_ci 91e41f4b71Sopenharmony_ci ``` 92e41f4b71Sopenharmony_ci 93e41f4b71Sopenharmony_ci - Method 4: Obtain the raw file descriptor of the resource file through the resource manager. For details, see [ResourceManager API Reference](../../reference/apis-localization-kit/js-apis-resource-manager.md#getrawfd9-1). 94e41f4b71Sopenharmony_ci 95e41f4b71Sopenharmony_ci ```ts 96e41f4b71Sopenharmony_ci // Code on the stage model 97e41f4b71Sopenharmony_ci const context : Context = getContext(this); 98e41f4b71Sopenharmony_ci // Obtain a resource manager. 99e41f4b71Sopenharmony_ci const resourceMgr : resourceManager.ResourceManager = context.resourceManager; 100e41f4b71Sopenharmony_ci ``` 101e41f4b71Sopenharmony_ci 102e41f4b71Sopenharmony_ci ```ts 103e41f4b71Sopenharmony_ci // Code on the FA model 104e41f4b71Sopenharmony_ci // Import the resourceManager module. 105e41f4b71Sopenharmony_ci import { resourceManager } from '@kit.LocalizationKit'; 106e41f4b71Sopenharmony_ci import { BusinessError } from '@kit.BasicServicesKit'; 107e41f4b71Sopenharmony_ci resourceManager.getResourceManager().then((resourceMgr : resourceManager.ResourceManager) => { 108e41f4b71Sopenharmony_ci console.log("Succeeded in getting resourceManager") 109e41f4b71Sopenharmony_ci }).catch((err : BusinessError) => { 110e41f4b71Sopenharmony_ci console.error("Failed to get resourceManager") 111e41f4b71Sopenharmony_ci }); 112e41f4b71Sopenharmony_ci ``` 113e41f4b71Sopenharmony_ci 114e41f4b71Sopenharmony_ci The method of obtaining the resource manager varies according to the application model. After obtaining the resource manager, call **resourceMgr.getRawFd()** to obtain the raw file descriptor of the resource file. 115e41f4b71Sopenharmony_ci 116e41f4b71Sopenharmony_ci ```ts 117e41f4b71Sopenharmony_ci 118e41f4b71Sopenharmony_ci resourceMgr.getRawFd('test.jpg').then((rawFileDescriptor : resourceManager.RawFileDescriptor) => { 119e41f4b71Sopenharmony_ci console.log("Succeeded in getting RawFileDescriptor") 120e41f4b71Sopenharmony_ci }).catch((err : BusinessError) => { 121e41f4b71Sopenharmony_ci console.error("Failed to get RawFileDescriptor") 122e41f4b71Sopenharmony_ci }); 123e41f4b71Sopenharmony_ci ``` 124e41f4b71Sopenharmony_ci 125e41f4b71Sopenharmony_ci3. Create an **ImageSource** instance. 126e41f4b71Sopenharmony_ci 127e41f4b71Sopenharmony_ci - Method 1: Create an **ImageSource** instance using the sandbox path. The sandbox path can be obtained by using method 1 in step 2. 128e41f4b71Sopenharmony_ci 129e41f4b71Sopenharmony_ci ```ts 130e41f4b71Sopenharmony_ci // path indicates the obtained sandbox path. 131e41f4b71Sopenharmony_ci const imageSource : image.ImageSource = image.createImageSource(filePath); 132e41f4b71Sopenharmony_ci ``` 133e41f4b71Sopenharmony_ci 134e41f4b71Sopenharmony_ci - Method 2: Create an **ImageSource** instance using the file descriptor. The file descriptor can be obtained by using method 2 in step 2. 135e41f4b71Sopenharmony_ci 136e41f4b71Sopenharmony_ci ```ts 137e41f4b71Sopenharmony_ci // fd is the obtained file descriptor. 138e41f4b71Sopenharmony_ci const imageSource : image.ImageSource = image.createImageSource(fd); 139e41f4b71Sopenharmony_ci ``` 140e41f4b71Sopenharmony_ci 141e41f4b71Sopenharmony_ci - Method 3: Create an **ImageSource** instance using an array buffer. The array buffer can be obtained by using method 3 in step 2. 142e41f4b71Sopenharmony_ci 143e41f4b71Sopenharmony_ci ```ts 144e41f4b71Sopenharmony_ci const imageSource : image.ImageSource = image.createImageSource(buffer); 145e41f4b71Sopenharmony_ci ``` 146e41f4b71Sopenharmony_ci 147e41f4b71Sopenharmony_ci - Method 4: Create an **ImageSource** instance using the raw file descriptor of the resource file. The raw file descriptor can be obtained by using method 4 in step 2. 148e41f4b71Sopenharmony_ci 149e41f4b71Sopenharmony_ci ```ts 150e41f4b71Sopenharmony_ci const imageSource : image.ImageSource = image.createImageSource(rawFileDescriptor); 151e41f4b71Sopenharmony_ci ``` 152e41f4b71Sopenharmony_ci 153e41f4b71Sopenharmony_ci4. Set **DecodingOptions** and decode the image to obtain a pixel map. 154e41f4b71Sopenharmony_ci - Set the expected format for decoding. 155e41f4b71Sopenharmony_ci ```ts 156e41f4b71Sopenharmony_ci import { BusinessError } from '@kit.BasicServicesKit'; 157e41f4b71Sopenharmony_ci import image from '@ohos.multimedia.image'; 158e41f4b71Sopenharmony_ci let img = await getContext(this).resourceManager.getMediaContent($r('app.media.image')); 159e41f4b71Sopenharmony_ci let imageSource:image.ImageSource = image.createImageSource(img.buffer.slice(0)); 160e41f4b71Sopenharmony_ci let decodingOptions : image.DecodingOptions = { 161e41f4b71Sopenharmony_ci editable: true, 162e41f4b71Sopenharmony_ci desiredPixelFormat: 3, 163e41f4b71Sopenharmony_ci } 164e41f4b71Sopenharmony_ci // Create a pixel map. 165e41f4b71Sopenharmony_ci imageSource.createPixelMap(decodingOptions).then((pixelMap : image.PixelMap) => { 166e41f4b71Sopenharmony_ci console.log("Succeeded in creating PixelMap") 167e41f4b71Sopenharmony_ci }).catch((err : BusinessError) => { 168e41f4b71Sopenharmony_ci console.error("Failed to create PixelMap") 169e41f4b71Sopenharmony_ci }); 170e41f4b71Sopenharmony_ci ``` 171e41f4b71Sopenharmony_ci - Decode an HDR image. 172e41f4b71Sopenharmony_ci ```ts 173e41f4b71Sopenharmony_ci import { BusinessError } from '@kit.BasicServicesKit'; 174e41f4b71Sopenharmony_ci import image from '@ohos.multimedia.image'; 175e41f4b71Sopenharmony_ci let img = await getContext(this).resourceManager.getMediaContent($r('app.media.CUVAHdr')); 176e41f4b71Sopenharmony_ci let imageSource:image.ImageSource = image.createImageSource(img.buffer.slice(0)); 177e41f4b71Sopenharmony_ci let decodingOptions : image.DecodingOptions = { 178e41f4b71Sopenharmony_ci // If IMAGE_DYNAMIC_RANGE_AUTO is passed in, decoding is performed based on the image format. If the image is an HDR resource, an HDR pixel map is obtained after decoding. 179e41f4b71Sopenharmony_ci desiredDynamicRange: image.DecodingDynamicRange.AUTO, 180e41f4b71Sopenharmony_ci } 181e41f4b71Sopenharmony_ci // Create a pixel map. 182e41f4b71Sopenharmony_ci imageSource.createPixelMap(decodingOptions).then((pixelMap : image.PixelMap) => { 183e41f4b71Sopenharmony_ci console.log("Succeeded in creating PixelMap") 184e41f4b71Sopenharmony_ci // Check whether the pixel map is the HDR content. 185e41f4b71Sopenharmony_ci let info = pixelMap.getImageInfoSync(); 186e41f4b71Sopenharmony_ci console.log("pixelmap isHdr:" + info.isHdr); 187e41f4b71Sopenharmony_ci }).catch((err : BusinessError) => { 188e41f4b71Sopenharmony_ci console.error("Failed to create PixelMap") 189e41f4b71Sopenharmony_ci }); 190e41f4b71Sopenharmony_ci ``` 191e41f4b71Sopenharmony_ci After the decoding is complete and the pixel map is obtained, you can perform subsequent [image processing](image-transformation.md). 192e41f4b71Sopenharmony_ci 193e41f4b71Sopenharmony_ci5. Release the **PixelMap** instance. 194e41f4b71Sopenharmony_ci 195e41f4b71Sopenharmony_ci ```ts 196e41f4b71Sopenharmony_ci pixelMap.release(); 197e41f4b71Sopenharmony_ci ``` 198e41f4b71Sopenharmony_ci 199e41f4b71Sopenharmony_ci## Sample Code - Decoding an Image in Resource Files 200e41f4b71Sopenharmony_ci 201e41f4b71Sopenharmony_ci1. Obtain a resource manager. 202e41f4b71Sopenharmony_ci 203e41f4b71Sopenharmony_ci ```ts 204e41f4b71Sopenharmony_ci const context : Context = getContext(this); 205e41f4b71Sopenharmony_ci // Obtain a resource manager. 206e41f4b71Sopenharmony_ci const resourceMgr : resourceManager.ResourceManager = context.resourceManager; 207e41f4b71Sopenharmony_ci ``` 208e41f4b71Sopenharmony_ci 209e41f4b71Sopenharmony_ci2. Create an **ImageSource** instance. 210e41f4b71Sopenharmony_ci - Create an **ImageSource** instance by using the array buffer of **test.jpg** in the **rawfile** folder. 211e41f4b71Sopenharmony_ci 212e41f4b71Sopenharmony_ci ```ts 213e41f4b71Sopenharmony_ci resourceMgr.getRawFileContent('test.jpg').then((fileData : Uint8Array) => { 214e41f4b71Sopenharmony_ci console.log("Succeeded in getting RawFileContent") 215e41f4b71Sopenharmony_ci // Obtain the array buffer of the image. 216e41f4b71Sopenharmony_ci const buffer = fileData.buffer.slice(0); 217e41f4b71Sopenharmony_ci const imageSource : image.ImageSource = image.createImageSource(buffer); 218e41f4b71Sopenharmony_ci }).catch((err : BusinessError) => { 219e41f4b71Sopenharmony_ci console.error("Failed to get RawFileContent") 220e41f4b71Sopenharmony_ci }); 221e41f4b71Sopenharmony_ci ``` 222e41f4b71Sopenharmony_ci 223e41f4b71Sopenharmony_ci - Create an **ImageSource** instance by using the raw file descriptor of **test.jpg** in the **rawfile** folder. 224e41f4b71Sopenharmony_ci 225e41f4b71Sopenharmony_ci ```ts 226e41f4b71Sopenharmony_ci resourceMgr.getRawFd('test.jpg').then((rawFileDescriptor : resourceManager.RawFileDescriptor) => { 227e41f4b71Sopenharmony_ci console.log("Succeeded in getting RawFd") 228e41f4b71Sopenharmony_ci const imageSource : image.ImageSource = image.createImageSource(rawFileDescriptor); 229e41f4b71Sopenharmony_ci }).catch((err : BusinessError) => { 230e41f4b71Sopenharmony_ci console.error("Failed to get RawFd") 231e41f4b71Sopenharmony_ci }); 232e41f4b71Sopenharmony_ci ``` 233e41f4b71Sopenharmony_ci 234e41f4b71Sopenharmony_ci3. Create a **PixelMap** instance. 235e41f4b71Sopenharmony_ci 236e41f4b71Sopenharmony_ci ```ts 237e41f4b71Sopenharmony_ci imageSource.createPixelMap().then((pixelMap: image.PixelMap) => { 238e41f4b71Sopenharmony_ci console.log("Succeeded in creating PixelMap") 239e41f4b71Sopenharmony_ci }).catch((err : BusinessError) => { 240e41f4b71Sopenharmony_ci console.error("Failed to creating PixelMap") 241e41f4b71Sopenharmony_ci }); 242e41f4b71Sopenharmony_ci ``` 243e41f4b71Sopenharmony_ci 244e41f4b71Sopenharmony_ci4. Release the **PixelMap** instance. 245e41f4b71Sopenharmony_ci 246e41f4b71Sopenharmony_ci ```ts 247e41f4b71Sopenharmony_ci pixelMap.release(); 248e41f4b71Sopenharmony_ci ``` 249