5

C++ で JPEG の画像サイズを取得する必要があります。それを行うためのかなり簡単な方法、またはその機能を提供する小さなライブラリのいずれかを探しています。私は OpenVMS で C++ を使用しているため、システムでコンパイルするには外部ライブラリを調整する必要がある場合があります。そのため、クローズド ソース ライブラリへのリンクを投稿しないでください。

トリックを実行したり、JPEG ファイル形式 (ここではおそらく JFIF ファイル形式を意味すると思います) を理解したりして、独自のソリューションを展開する方法を教えてくれる人はいますか?

4

6 に答える 6

13

関連するデータを抽出できるこのC関数があります。

これは C ルーチンですが、C++ で問題なくコンパイルできます。
通常の FILE ポインター (fopen から) を jpeg ファイルの先頭に渡し、2 つの int ポインターをイメージの高さと幅に設定します。

または、 Boost ライブラリで適切な機能を持つ jpeg クラスを見つけることができます( Adobe Generic Image Libraryから)。

jpeg_read_dimensions

boost::gil::jpeg_read_dimensions (const char *filename)

指定された場所にある JPEG ファイルの幅と高さを返します。場所が有効な JPEG ファイルに対応しない場合、std::ios_base::failure をスローします。

于 2008-11-25T12:16:36.477 に答える
3

libjpeg はかなり小さく、オープン ソースであり、OpenVMS で利用できます。JPEG を自分で処理するよりも、インストールした方がおそらく速いでしょう。

于 2008-11-25T12:20:15.923 に答える
2

多分libjpeg

于 2008-11-25T12:15:18.807 に答える
1

多数のラスターデータ形式の抽象化レイヤーとして機能するGDALライブラリを試してみることをお勧めします。これは、主にGIS/RSの地理空間アプリケーションで使用されます。

GDALは、C、C ++、およびスクリプト言語用の多数のAPIを提供します。もちろん、JPEG画像とJPEG2000などのバリアントをサポートしています。

JPEG画像を開いてそのサイズを照会する方法の非常に簡単な例を次に示します。

#include <gdal_priv.h>

GDALAllRegister(); // call ones in your application

GDALDataset* ds = (GDALDataset*)GDALOpen("my.jpeg", GA_ReadOnly);
int width  = ds->GetRasterXSize();
int height = ds->GetRasterYSize(),
int nbands = ds->GetRasterCount();

より完全な例については、GDALAPIチュートリアルを確認してください。

于 2010-01-20T13:00:58.433 に答える
1

この情報を取得するためだけに完全な libjpeg ライブラリは必要ありません (画像で何か他のことをする必要がない限り)。ImageInfoが役立つ場合があります。これは Java クラスですが、C++ を含む他の言語用のポートがあります。
指摘されたように、Exif はこれらの情報を変更する可能性があります (たとえば、向きの設定で)。

于 2008-11-25T12:27:53.913 に答える
1

OpenVMS 用のこのパッチで、このjpeg libを使用できるはずです。

于 2008-11-25T12:18:57.097 に答える