我试图在不解码文件的情况下获取 JPEG 图像的分辨率。我从互联网上获得了几个样本,但没有一个可以正常工作。似乎是这样因为manyJPEG 文件不是标准文件,但任何图形应用程序(Irfan、PSP、Firefox 等)都可以打开它们。
JPEG 的标头应该是:
typedef struct _JFIFHeader
{
BYTE SOI[2]; /* 00h Start of Image Marker */
BYTE APP0[2]; /* 02h Application Use Marker */
BYTE Length[2]; /* 04h Length of APP0 Field */
BYTE Identifier[5]; /* 06h "JFIF" (zero terminated) Id String */
BYTE Version[2]; /* 07h JFIF Format Revision */
BYTE Units; /* 09h Units used for Resolution */
BYTE Xdensity[2]; /* 0Ah Horizontal Resolution */
BYTE Ydensity[2]; /* 0Ch Vertical Resolution */
BYTE XThumbnail; /* 0Eh Horizontal Pixel Count */
BYTE YThumbnail; /* 0Fh Vertical Pixel Count */
} JFIFHEAD;
然而,当我查看其中一个非标准文件时,X密度和Y密度字段是错误的。但同样,所有图形应用程序都可以读取这个非标准文件。
有谁知道一段可以实际读取所有 JPEG 文件的 Delphi 代码吗?
德尔福 7、Win 7 32 位
我不知道所有 JPEG 文件,但您需要处理twoJPEG 的常见文件格式。由于 JPEG 是一种压缩方法而不是文件格式,因此全世界已经开发了几种在文件中存储 JPEG 图像数据的方法。您最有可能遇到的两个是 JFIF 和 EXIF。上面的代码涵盖了 JFIF,但不处理 EXIF。这两者在很大程度上不兼容,但都是 JPEG,因此您需要检测并处理是否使用标头信息,因为它们是不同的。
以分辨率为例。 EXIF的字段是x 分辨率 and y 分辨率,与 X/Y 密度方法相比。
I would:
-
阅读一下这两种格式(JFIF 和 EXIF)。我发现
维基百科是一个很好的起点
在此参考(对于过去的一些
我做过的项目),但大多数
可能有一些关于这方面的重要信息
主题也是如此。
JFIF:
http://en.wikipedia.org/wiki/JPEG_File_Interchange_Format http://en.wikipedia.org/wiki/JPEG_File_Interchange_Format
EXIF:
http://en.wikipedia.org/wiki/Exif http://en.wikipedia.org/wiki/Exif
编写代码以使用起始标头检测格式
独立处理每种格式
把整个东西包起来,这样你就可以把 JPEG 扔给它并得到
密度。这也将为您提供一个很好的机会来扔其他帮助代码来处理 JPEG 处理的“有趣”世界
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)