2016-03-10 31 views
0

我试图显示我的操纵像素(灰度它们),这是unsigned char表示为unsigned char。Qt - 在像素操作后显示无符号字符

下面是代码:

#include "mainwindow.h" 
#include <QApplication> 
#include "qimage.h" 
#include <QImage> 
#include <QLabel> 
#include <QColor> 
#include "qcolor.h" 
#include <Qdebug> 

int main(int argc, char *argv[]) 
{ 
    QApplication a(argc, argv); 
    int height; 
    int width; 
    unsigned char *p, *p_begin; 
    QImage img("C:\\Users\\Owner\\Pictures\\2013-09-26\\IMG_0836.JPG"); 
    height = img.height(); 
    width = img.width(); 

    p = (unsigned char *)malloc(height * width * sizeof(unsigned char)); 
    p_begin = p; 

    for (int row = 0; row < height; ++row) 
    { 
     for (int col = 0; col < width; ++col) 
     { 
      QColor clrCurrent(img.pixel(col, row)); 
      *p = (unsigned char)((clrCurrent.green() * 0.587) + (clrCurrent.blue() * 0.114) + (clrCurrent.red() * 0.299)); 
      p++; 
     } 
    } 

    p = p_begin; 
    for (int row = 0; row < height; ++row) 
    { 
     for (int col = 0; col < width; ++col) 
     { 
      QColor clrCurrent(img.pixel(col, row)); 

      clrCurrent.setBlue((int)(*p)); 
      clrCurrent.setGreen((int)(*p)); 
      clrCurrent.setRed((int)(*p)); 
      p++; 
     } 

    } 
    QLabel myLabel; 
    myLabel.setPixmap(QPixmap::fromImage(img)); 
    myLabel.show(); 

    return a.exec(); 
} 

我真的不知道为什么,但它表示的视频是原始图片,而不是操纵的一个,这应该是灰色的scaleded。 我试图找到网络没有运气,任何想法? Thx提前。

回答

3

这部分代码:

QColor clrCurrent(img.pixel(col, row)); 

clrCurrent.setBlue((int)(*p)); 
clrCurrent.setGreen((int)(*p)); 
clrCurrent.setRed((int)(*p)); 
p++; 

不会改变IMG。 它只是将像素颜色转换为临时对象,更改该对象,然后该对象就被销毁而不会影响图像。

我建议你检查QImage的函数scanLine。然后在一个for循环中改变像素的颜色。这将工作得更快,并将改变形象。

+0

Thx,它帮助了我很多。 –

+0

不客气。不要忘记选择正确的答案;) – johngull