在之前的问题(propagateComposedEvents: mouse data not accurate?)中,我有一个例行程序(如下),用于检查鼠标点击点是否在Canvas
组件的透明像素上。
var imageData = ctx.getImageData(mouseX, mouseY, 1, 1)
是否存在缓存“imageData”的表现性原因,因为在我的用例中,它不会改变?或者内存问题会反对缓存。或者我只是盯着那条线太长了......
MouseArea {
anchors.fill: parent
drag.target: parent
propagateComposedEvents: true
onClicked: {
var ctx = parent.getContext("2d")
var imageData = ctx.getImageData(mouseX, mouseY, 1, 1)
if (imageData.data[3] == 0 ){
console.log("graphic alpha clicked:", mouseX, mouseY);
mouse.accepted = false;
} else {
mouse.accepted = true;
}
}
}
答案 0 :(得分:3)
图片可能不会改变,但是看看你如何只获得一个像素,并且考虑到点击的位置会发生变化,除非你缓存整个图像,否则缓存是没有意义的。
你应该真正介绍一下,因为这里有几个因素:
即使它不是一个性能热点,最好是高效,做不必要的工作只是因为你可以逃脱它是一个坏习惯,它消耗能源,CPU时间和耗尽电池。做很多事情最终会让你陷入困境,因为那些堆积起来。