-1

C++/Qt で小さな GUI を開発しました。読み込まれた画像がグレースケールかどうかをすばやくテストする方法を知りたいです。実際には、gif 形式のグレースケール画像を読み込むと、depth()=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 は 2 つのケースで depth() が 32 に等しくなります。

これらの 2 つの gif 画像 (1 つはグレースケールで、もう 1 つはカラー) を区別するにはどうすればよいですか?

4

1 に答える 1

3

このQImageクラスには、画像がグレースケールかどうかをテストするために呼び出すことができる関数があります: QImage::isGrayscale(). これは、8 ビット カラー テーブル インデックス付きイメージと 32 ビット イメージの両方で機能します。

于 2013-02-27T21:46:24.943 に答える