gpt4 book ai didi

c++ - 在 QImage 中访问像素的最快方法是什么?

转载 作者:太空宇宙 更新时间:2023-11-04 13:52:05 26 4
gpt4 key购买 nike

我想知道修改 QImage 的一部分的最快方法是什么。

我有一段代码必须以 30Hz 的频率执行。它通过一种锁孔显示图像。不可能看到整个图像,只能看到圆圈内的一部分。第一个 for 循环删除之前的“显示的 key 孔部分”,第二个更新“显示的 key 孔”的位置。

for (int i = (prev_y - r_y); i < (prev_y + r_y); i++){
QRgb *line = (QRgb *)backgrd->scanLine(i);
for(int j = (prev_x - r_x); j < (prev_x + r_x) ; j++){
if((i >= 0 && i < this->backgrd->height()) && (j >= 0 && j < this->backgrd->width()))
line[j] = qRgb(0,0,0);
}
}
prev_x = new_x; prev_y = new_y;

for (int i = (new_y - r_y); i < (new_y + r_y); i++){
QRgb *line = (QRgb *)backgrd->scanLine(i);
QRgb *line2 = (QRgb *)this->picture->scanLine(i);
for(int j = (new_x - r_x); j < (new_x + r_x) ; j++){
if ((((new_x - j)*(new_x - j)/(r_x*r_x) + (new_y - i)*(new_y - i)/(r_y*r_y)) <= 1) && (i >= 0) && (i < this->picture->height())&& (j >= 0) && (j < this->picture->width()))
line[j] = line2[j];
}
}
this->current_img = this->backgrd;
}
this->update(); //Display QImage* this->current_img

如果我分析程序的时间戳,我发现每次执行时在执行流程中都有延迟...访问QImage中的一个像素有这么高的消耗吗?难道我做错了什么?Qt 程序是否有比 QImage 更好的替代品?

最佳答案

如何在数组/qimage 中预渲染您的“ key 孔”并与源进行按位与操作?

  • 原始像素&&黑色=>黑色
  • 原始像素&&白色=>原始像素

您在最内层循环中有很多条件(虽然有些可以移出),但是使用乘法和除法计算圆半径看起来很昂贵。您可以为每一帧重复使用锁孔掩码,因此无需执行任何计算。

关于c++ - 在 QImage 中访问像素的最快方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23085470/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com