2017-02-17 7 views
1

Qt 5.4의 에 QImage에 문제가 있습니다.왜 다시 읽는 픽셀 색상이 QImage에서 그려지는 색상과 다른가요?

이미지의 색은 Format_ARGB32입니다. QPainter 그리기 기능을 사용하여 이미지의 픽셀에 주어진 RGBA 값을 설정하고 나중에 QImage::pixel을 사용하여 값을 다시 읽으려고합니다.

아직 색칠 된 값과 다시 읽은 값이 다릅니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?

샘플 코드 :

QImage image(100, 100, QImage::Format_ARGB32); 
uint value = 0x44fa112b; //some value.. 
QPainter painter(&image); 
painter.setCompositionMode(QPainter::CompositionMo de_Source); 
QColor color(qRed(value), qGreen(value), qBlue(value), qAlpha(value)); 
QBrush brush(color); 
painter.setBrush(brush); 
painter.drawRect(0,0,image.width(), image.height()); 

uint value1 = image.pixel(50,50); 
// value1 IS NOT EQUAL TO value. Why?? 
+0

값으로 이미지를 채우려면 QImage :: fill을 사용하면됩니다. 그렇다면 결국 얻을 수있는 가치는 무엇입니까? – peppe

+0

채우기가 제대로 작동합니다 (반환되는 색상 값은 채우기에 사용 된 것과 동일 함). 그러나 제 경우에는 이미지에 색칠하고 다시 읽을 값이 다릅니다. 단일 값이 아닙니다. 어떤 생각? – rajeshma

+1

게시 된 코드 (컴포지션 모드 'QPainter :: CompositionMode_Source')가 예상대로 작동합니다. –

답변

0

이 Qt는 5.7에서 잘 작동합니다. 아마 이전의 Qt 버전은 painter.end() 호출이 필요할 것입니다.

#include <QtGui> 
int main(int argc, char ** argv) { 
    QGuiApplication app{argc, argv}; 
    QImage image{100, 100, QImage::Format_ARGB32}; 
    auto const set = 0x44fa112b; 
    QPainter painter(&image); 
    painter.setCompositionMode(QPainter::CompositionMode_Source); 
    painter.setBrush({{qRed(set), qGreen(set), qBlue(set), qAlpha(set)}}); 
    painter.drawRect(image.rect()); 
    if (false) painter.end(); //<< try with true here 
    auto readback = image.pixel(50,50); 
    qDebug() << hex << set << readback; 
    Q_ASSERT(readback == set); 
} 
+0

실제 코드와 결과 공유 .. – rajeshma

+0

painter.end()도 시도해 보았습니다. 차이점은 없습니다. 입력 값 = "44fa112b"의 경우 출력값 = "44fb1329" – rajeshma

0

문제가 해결되었습니다. Qt 5.8을 사용하면 제대로 작동합니다. Qt 5.4의 버그처럼 보입니다. 감사합니다.