-1

我在 C++/Qt 中开发了一个小型 GUI,我想知道一种快速测试加载的图像是否为灰度的方法。在实践中,当我加载 gif 格式的灰度图像时,我希望它被识别为深度()=8 的灰度图像,而当我加载彩色 gif 图像时,QImage 的深度将为 32。

这是我的开放方法:

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 在两种情况下的 depth() 等于 32。

如何区分这两个 gif 图像(一个灰度和另一个彩色)?

4

1 回答 1

3

该类QImage有一个函数,您可以调用该函数来测试图像是否为灰度:QImage::isGrayscale(). 它适用于 8 位颜色表索引图像和 32 位图像。

于 2013-02-27T21:46:24.943 回答