HarmonyOS 鸿蒙Next 无法显示一张png图片

发布于 1周前 作者 zlyuanteng 最后一次编辑是 5天前 来自 鸿蒙OS

HarmonyOS 鸿蒙Next 无法显示一张png图片
在代码目录下,同时放置一张cs.png的图片,不明白的是,
1.path怎么正确的写?
2.desiredColorSpace要怎么设置,用create(ColorSpace.SRGB)不晓得正不正确?

Canvas(contexts).width(100.percent).height(100.percent).backgroundColor(Color.TRANSPARENT)
.onReady{=>
    let path:String="cs.png"
    let imgsou:ImageSource=image.createImageSource(path)
    let cp=create(ColorSpace.SRGB)
    let deo=image.DecodingOptions(sampleSize:1, rotate:0, editable:true, desiredSize:Size(height:300, width:266), desiredRegion:Region(Size(height:300,width:266),0,0), desiredPixelFormat: PixelMapFormat.RGBA_8888, index:0, fitDensity:3, desiredColorSpace:cp)
    let px:PixelMap=imgsou.createPixelMap(options:deo)
    this.contexts.drawImage(px,0,0)
}

实测发现,CANVAS出现后,闪退,没有出现图片

8 回复

1.path在ets/common/1234.png

demo如下:

[@Entry](/user/Entry)
[@Component](/user/Component)
struct Index {
 private settings: RenderingContextSettings = new RenderingContextSettings(true)
 private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
 private offCanvas: OffscreenCanvas = new OffscreenCanvas(600, 600)
 private img:ImageBitmap = new ImageBitmap("common/1234.png")

 build() {
   Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
     Canvas(this.context)
       .width('100%')
       .height('100%')
       .backgroundColor('#F5DC62')
       .onReady(() =>{
         let offContext = this.offCanvas.getContext("2d", this.settings)
         // 使用drawImage接口将图片画在(0,0)为起点,宽高130的区域
         offContext.drawImage(this.img,0,0,130,130);
         // 使用getImageData接口,获得canvas组件区域中,(50,50)为起点,宽高130范围内的绘制内容
         let imagedata = offContext.getImageData(50,50,130,130);
         // 使用putImageData接口将得到的ImageData画在起点为(150, 150)的区域中
         offContext.putImageData(imagedata,150,150);
         // 将离屏绘制的内容画到canvas组件上
         let image = this.offCanvas.transferToImageBitmap();
         this.context.transferFromImageBitmap(image);
       })
   }
   .width('100%')
   .height('100%')
 }
}
看懂原理了,非常感谢

找HarmonyOS工作还需要会Flutter的哦,有需要Flutter教程的可以学学大地老师的教程,很不错,B站免费学的哦:https://www.bilibili.com/video/BV1S4411E7LY/?p=17

放rawfile读取

仓颉下,图片放到rawfile里面,大小266*300像素 var huancun:Array<UInt8>=Array<UInt8>(319200,item:0) huancun=resmg.getRawFileContent(“cs.png”)

        this.contexts.fillStyle(Color.GREEN)
        this.contexts.font(style: FontStyle.Normal, weight: FontWeight.W100, size: 50.vp, family: "sans-serif")
        this.contexts.fillText("${huancun.size}", 150, 500)

        let colors:Array&lt;UInt8&gt;=Array&lt;UInt8&gt;(319200,item:0)
        let opts:InitializationOptions=InitializationOptions(alphaType: AlphaType.OPAQUE, editable: true, pixelFormat: PixelMapFormat.RGBA_8888, scaleMode: ScaleMode.FIT_TARGET_SIZE, size:Size(height: 300, width: 266))
        let pm:PixelMap=createPixelMap(colors,opts)

        pm.writeBufferToPixels(huancun)

后续,怎么把pm这个pixelmap写到一个canvas中?

arkts里面this.context.drawImage就可以画一个pixelmap,这个canvas和html那个很像的,仓颉还没看过,应该是差不多的

像双缓存一样,一次性转存并显示?

针对您提出的HarmonyOS 鸿蒙Next无法显示一张png图片的问题,以下是一些可能的解决方法:

  1. 检查图片格式与完整性:请确认图片格式是否为鸿蒙系统所支持(如PNG),同时检查图片文件是否已损坏。您可以使用其他图片查看器打开该图片,验证其是否能正常显示。
  2. 系统缓存问题:尝试清除系统缓存或重启设备,有时系统缓存可能导致图片无法正常加载。
  3. 系统权限设置:确保您的应用或系统具有访问该图片文件的权限。您可以在设置中检查应用权限,或尝试使用文件管理器查看图片是否能正常显示。
  4. 版本兼容性:不同版本的鸿蒙OS可能会有API的变化,请确保您使用的方法和属性与当前系统版本兼容。

如果上述方法均未能解决问题,可能是系统本身存在未知的BUG。建议关注华为官方发布的更新信息,看是否有相关的修复补丁。同时,您也可以联系HarmonyOS的官方客服,寻求专业帮助。官网客服地址是:https://www.itying.com/category-93-b0.html

回到顶部