2013-02-22 3 views
3

그레이 스케일 Format_Indexed8 이미지를 저장하려면 Qt5를 가져 오는 데 문제가 있습니다. 파일을 저장할 때 관련 기능이없는 다색 혼잡이 발생합니다. 나는 그레이 스케일 BMP를 기대하고있다.QT5의 그레이 스케일 Format_Indexed8을 (를) 저장 하시겠습니까?

단색 이미지는 sizeof(uchar)*widthGL*heightGL으로 저장됩니다.

glTexSubImage2D(GL_TEXTURE_2D,0,0,0,widthGL,heightGL, 
       GL_LUMINANCE,GL_UNSIGNED_BYTE,noise); 
//computation 
QImage mySurface(noise,widthGL,heightGL,QImage::Format_Indexed8); 
mySurface.save("test.bmp","BMP"); 

나의 현재 해결책은 두 번째 배열을 사용하는 것 및 그레이 스케일 이미지를 닮은 출력 뭔가 Qt5를 얻을 수있는 방법이 있다면 궁금 해서요 더러운

static unsigned char* mbuffer = new unsigned char[3*widthGL*heightGL]; 
for (int i = 0,bpos=0;i<widthGL*heightGL;i++) 
{ 
mbuffer[bpos++]=noise[i]; 
mbuffer[bpos++]=noise[i]; 
mbuffer[bpos++]=noise[i]; 
} 
QImage mySurface(mbuffer,widthGL,heightGL,QImage::Format_RGB888); 

을 느낀다.

편집

이 문제가 Qt는 최신 버전에서 해결 합리적인 기회가있다.

답변

0

최신 버전은 Format_Grayscale8를 도입 여덟 비트 그레이 스케일 이미지처럼 저장 될 수 있도록 :

QImage mySurface(noise,widthGL,heightGL,QImage::Format_Grayscale8); 
mySurface.save("test.bmp","BMP"); 

때 나는이 문제를 재검토 @owacoder가 제안한 접근법이 실제로 ImageJ 또는 Paint (어떤 이유로 든)로 열리지 않은 잘못된 BMP 파일을 생성하기 시작했다는 것을 알게되었습니다.

1

이미지를 사용하기 전에 색상 표를 설정하는 데 문제가 있습니다. Qt는 워드 프로세서 (http://doc.qt.io/qt-5/qimage.html#QImage-4)에서 :

포맷은 인덱스 색상 형식 인 경우, 이미지의 색상 표는 처음에 비어 충분히 setColorCount() 또는 이미지 사용하기 전에 setColorTable()로 확장해야합니다.

이 작업을 시도 할 수 있습니다 : Qt는의

glTexSubImage2D(GL_TEXTURE_2D,0,0,0,widthGL,heightGL,GL_LUMINANCE,GL_UNSIGNED_BYTE,noise); 
//computation 
QVector<QRgb> colorTable(256); //our grayscale palette 
QImage mySurface(noise,widthGL,heightGL,QImage::Format_Indexed8); 
for (int i = 0; i < 256; ++i) 
    colorTable[i] = qRgb(i, i, i); //build palette 
mySurface.setColorCount(256); 
mySurface.setColorTable(colorTable); 
mySurface.save("test.bmp","BMP");