2013-02-27 3 views
-1

Я разработал небольшой графический интерфейс в C++/Qt, я хотел бы узнать, как быстро проверить, загружен ли снимок. На практике, когда я загружаю изображение в градациях серого в формате gif, я хочу, чтобы оно было распознано как изображение в оттенках серого с глубиной() = 8, и когда я загружаю цветное изображение gif, глубина QImage будет равна 32.Qt - Убедитесь, что изображение загружено в оттенки серого

Вот мой открытый метод:

void ImageViewer::open() 
{ 
    int status_off = 0; 
    fileName = QFileDialog::getOpenFileName(this, tr("Open File"), QDir::currentPath()); 

    if (!fileName.isEmpty()) { 
    current_qimage = QImage(fileName); 
    if (current_qimage.isNull()) { 
     QMessageBox::information(this, tr("Image Viewer"), 
      tr("Cannot load %1.").arg(fileName)); 
     return; 
    } 
    updateStatus(status_off); 
    // Image is colored with depth=8 
    if (current_qimage.depth()/8 != 4) 
     {rgblum_status = 0;} 
     else // Image is grayscale with depth=32 
     {rgblum_status = 1;} 

    loadImage(); 
    } 
} 

с первого теста, мне кажется, что current_qimage, в current_qimage = QImage(fileName); наследует во-первых, от формата GIF (здесь) до содержания изображения. Поэтому QImage имеет в двух случаях глубину(), равную 32.

Как сделать разницу между этими двумя изображениями gif (один оттенок серого и другой цветной)?

ответ

2

Класс QImage имеет функцию, которую вы можете вызвать для проверки, если изображение полутоновое или нет: QImage::isGrayscale(). Он работает как для 8-битных индексированных изображений таблицы цветов, так и для 32-битных изображений.