2016-03-10 6 views
0

Я пытаюсь отобразить мои манипулируемые пиксели (серая шкала), которая непредставленно представлена ​​как 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. Он просто принимает пиксельный цвет для временного объекта, меняет этот объект, тогда этот объект просто разрушен без влияния на изображение.

Я рекомендую вам проверить функцию scanLine QImage. А затем измените цвет пикселей в одном для цикла на месте. Это будет работать намного быстрее и изменит изображение.

+0

Thx, это помогло мне много. –

+0

Добро пожаловать. Не забудьте выбрать ответ как правильно;) – johngull