【问题标题】:How to invert QImage without affecting performance?如何在不影响性能的情况下反转 QImage?
【发布时间】:2014-08-08 18:05:06
【问题描述】:

我在 QGraphicsView 中有一个 QImage,我需要连续显示图像。有时我需要连续显示倒置的图像。为此,我使用

img.invertPixels(QImage::InvertRgba); 

但此时,由于不断的反相过程,显示正在闪烁。如何在不影响性能的情况下实现反相过程?显示似乎很平滑,没有反转。 `

QImage img(byImageBuf, width, height, QImage::Format_Indexed8);   
  scene->clear();        
 if(bInvertPixel)       
 {   
    /* Inverted image */        
     img.invertPixels(QImage::InvertRgba);      
 }        
 scene->addPixmap(QPixmap::fromImage(img));     

 view->fitInView(0, 0, width, height,  Qt::IgnoreAspectRatio);        
 view->update();`

【问题讨论】:

  • “反转图像而不影响性能”是什么意思?你认为图像可以在没有 CPU 周期的情况下反转吗?
  • invert 表示黑变白,白变黑
  • 我问的是“不影响性能”部分。是什么让您认为img.invertPixels(QImage::InvertRgba); 的速度还不够快?
  • 当我连续显示图像而不反转时,它以平滑的方式显示,但是在反转时,显示闪烁。
  • 抱歉,您的问题非常模糊不清。我建议你稍微编辑一下。确保你清楚地描述你在做什么,以及问题是什么。例如,你为什么一开始不说“闪烁”。你指望别人怎么猜“影响性能”就是“闪烁”?

标签: qt qt4 qgraphicsview qimage


【解决方案1】:

由于您使用的是索引图像类型 (QImage::Format_Indexed8),您可以反转颜色表并进行切换:

if(bInvertPixel)
{
   /* Inverted image */
   img.setColorTable( invertedColorTable );
}
else
{
   img.setColorTable( standardColorTable );
}

standardColorTableinvertedColorTable 是 QRgb 值的数组。

颜色表的美妙之处在于您不必每次显示图像时都更新它;只需设置一次,然后忘记它。连接来自按钮的信号以反转颜色并在那里设置颜色表。

【讨论】:

    猜你喜欢
    • 2012-04-20
    • 2021-04-10
    • 2012-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-14
    • 2014-05-23
    相关资源
    最近更新 更多