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的传输?即使对于单个像素,这些传输也是昂贵的
  • 这种情况多久发生一次
  • 整个图像有多大,完全缓存是否可行
即使它不是一个性能热点,但最好是高效的,只因为你可以摆脱它而做不必要的工作是一个坏习惯,它消耗能源、CPU时间并耗尽电池。做很多这样的事情最终会让你陷入困境,因为这些事情会层出不穷

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;
            }
        }
    }