2015-06-26 3 views
0

Я создал простое приложение, и мне нужно экспортировать из pixmap в 16-битное изображение BMP. У меня есть несколько элементов пиксельных изображений, так у меня есть цикл, как это, где я первый создать QImage и преобразовать его в Format_RGB16:Qt - не удается экспортировать QImage в 16 бит bmp

for(QList<image_handler * >::iterator it=imageItems->begin(); it!=imageItems->end(); it++) 
    { 
     ... 
     // image_handler inherits QPixmap 
     QFile export_image(path+"/img_"+code+".bmp"); 

     QImage export_img = (*it)->toImage().convertToFormat(QImage::Format_RGB16); 
     export_img.save(&export_image, "BMP"); 
     ... 
    } 

где image_handler это мой собственный QPixmap. Изображения экспортируются по указанному пути, с правильным именем файла. Однако, когда я смотрю на свойства файла (в окнах), я вижу, что глубина изображения 24-бит. К сожалению, мне нужно, чтобы они были 16-битными.

Что я здесь делаю неправильно? Или это ошибка в Qt? Затем, как я могу экспортировать 16-битные bmps из pixmap?

+0

'bool QImage :: save (const QString & fileName, const char * format = 0, int quality = -1) const' – Amartel

+0

Давать путь с QString не помогло. Все еще получаются 24-битные изображения BMP. – Gresthorn

ответ

0

Оказывается, что Qt принудительно преобразует изображение, прежде чем сохранять его в bmp.

кварты-SRC/SRC/GUI/изображение/qbmphandler.cpp: 777:

bool QBmpHandler::write(const QImage &img) 
{ 
    QImage image; 
    switch (img.format()) { 
    case QImage::Format_ARGB8565_Premultiplied: 
    case QImage::Format_ARGB8555_Premultiplied: 
    case QImage::Format_ARGB6666_Premultiplied: 
    case QImage::Format_ARGB4444_Premultiplied: 
     image = img.convertToFormat(QImage::Format_ARGB32); 
     break; 
    case QImage::Format_RGB16: 
    case QImage::Format_RGB888: 
    case QImage::Format_RGB666: 
    case QImage::Format_RGB555: 
    case QImage::Format_RGB444: 
     image = img.convertToFormat(QImage::Format_RGB32); 
     break; 
    default: 
     image = img; 
    } 
    ... 

Так что, если вам нужно сохранить в формате BMP 16bit, вам придется сделать это вручную, заполняя заголовок и используя QImage::bits() и QImage::byteCount().

+0

Хм, кажется, у меня действительно нет другого варианта, кроме как сделать это вручную. Знаете ли вы, почему они меняют его? – Gresthorn

+0

@ Gresthorn Я могу только предположить ... может быть, проще сэкономить 32 бит bmp? Не уверен, хотя ... – Amartel