2013-06-18 7 views
1

QImage::Format_MonoQImage을 만들었습니다. 이미지를 QGraphicsViewQGraphicsScene을 통해 표시하려고하면보기가 변경되지 않습니다. QImageQPixmap::fromImage() 기능을 통해 생성 된 QPixmap을 사용하여 장면에로드됩니다. 또한 저장 기능을 사용하여 PNG/JPG/BMP로 QPixmap을 저장하려고했지만 아무 소용이 없었습니다.QImage :: Format_mono to .png 및 QGraphicsScene

QGraphicsView *view = new QGraphicsView(); 
QGraphicsScene *scene = new QGraphicsScene(); 
view.setScene(scene); 
QImage img(size,QImage::Format_Mono); 
QVector<QRgb> v; 
v.append(Qt::color0); // I have tried using black and white 
v.append(Qt::color1); // instead of color0 and 1 as well. 
img.setColorTable(v); 
// Do some stuff to populate the image using img.setPixel(c,r,bw) 
// where bw is an index either 0 or 1 and c and r are within bounds 
QPixmap p = QPixmap::fromImage(img); 
p.save("mono.png"); 
scene->addPixmap(p); 
// Code to display the view 

을 내가 대신 QImage::Format_RGB888의 이미지를 확인하고 PNG /보기가 적절하게 표시 검은 색 또는 흰색 중 하나와 픽셀을 채울 경우 다음과 같이 기본 코드 구조입니다.

QGraphicsViewQImage을 표시하도록 코드를 업데이트하려면 어떻게해야합니까?

+0

그런데'view.setScene (scene);은 코드에있는 것이 아니라 오타에 불과합니다. – Boris

답변

3

오류는 Qt::GlobalColor들 (예 Qt::white 또는 Qt::color0)이 타입의 QColor 것으로하고, 예상하지 QRgb. 당신은 세계 방법 qRgb(r,g,b)를 사용하여 QRgb를 만들 직접 방법 QColor::rgb()를 사용하여 QRgbQColor를 변환하거나 할 수

(QRgb 서명되지 않은 INT의 형식 정의)입니다. 다음은 monotrue 또는 false인지 여부를 나타내는 매우 정확한 이미지를 표시하고 (PNG로 저장하는) 전체 작업 예제입니다.

#include <QApplication> 
#include <QGraphicsScene> 
#include <QGraphicsView> 

int main(int argc, char **argv) 
{ 
    QApplication app(argc, argv); 

    QGraphicsView *view = new QGraphicsView(); 
    QGraphicsScene *scene = new QGraphicsScene(); 
    view->setScene(scene); 

    int W = 100; 
    int H = 100; 
    QImage img; 
    uint color0 = qRgb(255,0,0); 
    uint color1 = Qt::green.rgb(); 
    bool mono = true; 
    if(mono) 
    { 
     img = QImage(QSize(W,H),QImage::Format_Mono); 
     QVector<QRgb> v; v << color0 << color1; 
     img.setColorTable(v); 
     for(int i=0; i<W; i++) 
     for(int j=0; j<H; j++) 
     { 
      uint index; 
      if(j-(j/10)*10 > 5) 
       index = 0; 
      else 
       index = 1; 
      img.setPixel(i,j,index); 
     } 
    } 
    else 
    { 
     img = QImage(QSize(W,H),QImage::Format_RGB888); 
     for(int i=0; i<W; i++) 
     for(int j=0; j<H; j++) 
     { 
      uint color; 
      if(j-(j/10)*10 > 5) 
       color = color0; 
      else 
       color = color1; 
      img.setPixel(i,j,color); 
     } 
    } 

    QPixmap p = QPixmap::fromImage(img); 
    p.save("mono.png"); 
    scene->addPixmap(p); 
    view->show(); 

    return app.exec(); 
} 
+0

당신이 옳았습니다. 나는 Qt 전역 색상, 즉'Qt :: white'과'Qt :: color0'를 사용하고 있다는 것을 발견했다. 예상대로 동작하려면'QColor (Qt :: white) .rgb()'를 사용하여이 값을 변환해야했습니다. – user29291

+0

위대한 :-) 더 유용하게 사용할 수 있도록 내 대답을 업데이트했습니다. – Boris