Qt 画布:缓存图像数据
在前面的问题()中,我有一个例程(如下)用于检查鼠标点击点是否位于Qt 画布:缓存图像数据,qt,qml,Qt,Qml,在前面的问题()中,我有一个例程(如下)用于检查鼠标点击点是否位于画布组件中的透明像素上 var imageData = ctx.getImageData(mouseX, mouseY, 1, 1) 在我的用例中,缓存“imageData”是不会改变的,因此有没有任何性能上的原因?或内存问题,这将有利于缓存。还是我只是盯着那条线看得太长了 图像可能不会更改,但请查看如何仅获取图像的一个像素,并考虑到单击的位置将更改,除非缓存整个图像,否则缓存毫无意义 你真的应该做个简介,因为这里有几个因素在
画布
组件中的透明像素上
var imageData = ctx.getImageData(mouseX, mouseY, 1, 1)
在我的用例中,缓存“imageData”是不会改变的,因此有没有任何性能上的原因?或内存问题,这将有利于缓存。还是我只是盯着那条线看得太长了
图像可能不会更改,但请查看如何仅获取图像的一个像素,并考虑到单击的位置将更改,除非缓存整个图像,否则缓存毫无意义 你真的应该做个简介,因为这里有几个因素在起作用:
- 图像数据检索是否涉及VRAM到RAM的传输?即使对于单个像素,这些传输也是昂贵的
- 这种情况多久发生一次
- 整个图像有多大,完全缓存是否可行
即使它不是一个性能热点,但最好是高效的,只因为你可以摆脱它而做不必要的工作是一个坏习惯,它消耗能源、CPU时间并耗尽电池。做很多这件事最终会让你陷入困境,因为它们会堆积起来。图像可能不会改变,但看看你是如何只得到一个像素的,并且考虑到点击的位置会改变,除非你缓存整个图像,否则缓存是没有意义的 你真的应该做个简介,因为这里有几个因素在起作用:
- 图像数据检索是否涉及VRAM到RAM的传输?即使对于单个像素,这些传输也是昂贵的
- 这种情况多久发生一次
- 整个图像有多大,完全缓存是否可行
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;
}
}
}