背景知识:
ArkUI定义了像素单位px、vp,和底层canvas接口参数的单位有关。
问题现象:
开发者调用has.canvasPutImageData接口绘制canvas图像,预期效果是绘制的宽高和开发者传参width、height一致;实际效果是绘制的宽高比传参width、height要小。
问题原因:
has.canvasPutImageData的实现原理是将开发者传的像素数据(单位为px)转换为imageData对象(单位为vp),再通过canvas方法putImageData绘制在canvas组件上。由于单位转换(px→vp),最终导致canvas绘制宽高和传值width、height不一致。
解决措施:
建议开发者使用CanvasRenderingContext2D接口替代CanvasContext接口,CanvasRenderingContext2D.putImageData已解决相关问题,且新版接口在性能与功能支持方面均有显著优化,能够提供更为稳定和高效的渲染能力。
问题现象:
开发者调用has.canvasGetImageData接口获取指定区域内的像素数据,预期结果是返回值width、height和传入的width、height一致;实际结果是返回值width、height比传入的width、height要大。
问题原因:
has.canvasGetImageData的实现原理是调用canvas方法getImageData获取canvas组件指定区域内的像素(接口参数默认单位为vp),得到返回值后,将数据返回给开发者。但是ASCF框架将返回值imageData对象的像素单位设置为px。由于像素单位不一致,导致接口的返回值width、height和开发者传的参数width、height不一致。
解决措施:
建议开发者使用CanvasRenderingContext2D接口替代CanvasContext接口,CanvasRenderingContext2D.getImageData已解决相关问题,且新版接口在性能与功能支持方面均有显著优化,能够提供更为稳定和高效的渲染能力。