5

我需要在 C++ 中获取 JPEG 的图像尺寸。我正在寻找一种相当简单的方法或提供该功能的小型库。我在 OpenVMS 上使用 C++ 工作,因此任何外部库都可能必须适应在我们的系统上编译 - 所以请不要向我发布指向大型封闭源代码库的链接!

有没有人遇到过任何可以解决问题的方法,或者了解 JPEG 文件格式(我想我可能在这里指的是 JFIF 文件格式)来告诉我如何着手推出自己的解决方案?

4

6 回答 6

13

你有这个C 函数可以为你提取相关数据。

这是一个 C 例程,但应该可以用 C++ 编译。
将一个普通的 FILE 指针(来自 fopen)传递给一个 jpeg 文件的开头,并将两个 int 指针传递给图像的高度和宽度。

或者您可能会在Boost 库中找到一个具有正确功能的 jpeg 类(来自Adob ​​e 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

您应该能够将此jpeg 库与此补丁一起用于 OpenVMS

于 2008-11-25T12:18:57.097 回答
1

不需要完整的 libjpeg 库来获取此信息(除非您需要对图像执行其他操作)。ImageInfo可能会对您有所帮助。它是一个 Java 类,但也有其他语言的端口,包括 C++。
正如所指出的,Exif 可能会更改这些信息(例如,使用方向设置)。

于 2008-11-25T12:27:53.913 回答
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();

查看GDAL API 教程以获得更完整的示例。

于 2010-01-20T13:00:58.433 回答