HarmonyOS 鸿蒙Next image.createPixelMap返回undefined的问题
HarmonyOS 鸿蒙Next image.createPixelMap返回undefined的问题 调用系统相册选择一张图片,拿到图片的uri,转成PixelMap,再用packing压缩一下得到压缩后的ArrayBuffer,最后用image.createPixelMap转成压缩后的PixelMap,返回的是undefined
参考此demo:
import { picker } from '@kit.CoreFileKit';
import fs from '@ohos.file.fs';
import { BusinessError } from '@kit.BasicServicesKit';
import { image } from '@kit.ImageKit';
import util from '@ohos.util';
@Entry
@Component
struct pickImg {
uri: string = '';
resultBase64Str: string = ''
pixelMap?: image.PixelMap = undefined;
selectUris: Array<string> = [];
@State pixelStr: string = '';
build() {
Column() {
Image(this.pixelMap).width(200).height(200)
Button('打开相册').onClick(() => {
const photoViewPicker = new picker.PhotoViewPicker();
photoViewPicker.select().then(async (photoSelectResult: picker.PhotoSelectResult) => {
this.selectUris = photoSelectResult.photoUris;
console.info('photoViewPicker.select to file succeed and uris are:' + this.selectUris);
let file = fs.openSync(this.selectUris[0], fs.OpenMode.READ_ONLY);
console.info('file fd: ' + file.fd);
const imageSource: image.ImageSource = image.createImageSource(file.fd);
fs.closeSync(file);
let decodingOptions: image.DecodingOptions = { editable: true, desiredPixelFormat: 3, }
imageSource.createPixelMap(decodingOptions).then(async (pixelMap1: image.PixelMap) => {
this.pixelMap = pixelMap1;
});
}).catch((err: BusinessError) => {
console.error(`Invoke photoViewPicker.select failed, code is ${err.code}, message is ${err.message}`);
})
})
Button('转base64')
.onClick(() => {
const imagePackerApi = image.createImagePacker();
const packOptions: image.PackingOption = { format: 'image/jpeg', quality: 10 }
imagePackerApi.packing(this.pixelMap, packOptions).then(async (data: ArrayBuffer) => {
let arrayBuffer = data;
console.log('arrayBuffer', arrayBuffer)
let base64 = new util.Base64Helper();
let uint8Arr = new Uint8Array(arrayBuffer)
this.pixelStr = base64.encodeToStringSync(uint8Arr)
}).catch((error: BusinessError) => {
console.error('Failed to pack the image. And the error is: ' + error);
})
})
Image('data:image/png;base64,'+this.pixelStr)
.height('50%')
.width('50%')
}
}
}
更多关于HarmonyOS 鸿蒙Next image.createPixelMap返回undefined的问题的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
关于HarmonyOS(鸿蒙)中image.createPixelMap
返回undefined
的问题,这通常表明在调用该方法时,某些必要的条件或参数未正确设置或传递。以下是一些可能的原因及解决方案的简述:
-
资源路径错误:确保传递给
createPixelMap
的资源路径是正确的,并且该资源文件存在于指定的路径下。路径错误或文件缺失会导致方法返回undefined
。 -
资源格式不支持:
createPixelMap
可能不支持某些图像格式。检查图像文件的格式是否为系统所支持。 -
权限问题:应用程序可能没有足够的权限访问指定的资源文件。确保应用已声明并获得了访问该资源的必要权限。
-
资源加载时机:如果资源是在异步过程中加载的,可能在资源实际可用之前就调用了
createPixelMap
。确保资源已完全加载后再进行调用。 -
API使用错误:检查
createPixelMap
的调用方式是否符合API文档的描述,包括参数的类型和顺序。
如果以上检查均无误,但问题依旧存在,可能是系统或框架的bug。此时,建议直接联系鸿蒙系统的官方支持团队以获取进一步的帮助。
如果问题依旧没法解决请联系官网客服, 官网地址是 https://www.itying.com/category-93-b0.html,