4
JFIF 파일 형식의 헤더를 읽고 확인하기위한 C++ 구조를 만들었습니다. 다음과 같이 구조는 JFIF/EXIF (JPEG) 헤더에서 실제 이미지 해상도를 얻으시겠습니까?
#pragma pack(1)
typedef struct _JFIF_Header
{
WORD SOIMarker; // start of image marker
WORD APP0_Marker; // Application use marker
WORD APP0_Length; // Length of APP0 field
BYTE Identifier[5]; // zero terminating string "JFIF",X'4A', X'46', X'49', X'46', X'00'
BYTE Version[2]; // X'01',X'02'
BYTE Units; // units = 0:no units ;; units = 1:X and Y are dots per inch ;; units = 2:X and Y are dots per cm
WORD XDensity; // horizontal pixel density
WORD YDensity; // vertical pixel density
BYTE XThumbnail; // Thumbnail horizontal pixel density
BYTE YThumbnail; // Thumbnail vertical pixel density
}JFIFHeader;
원시 디스크 클러스터에서 읽기 및
JFIFHeader
구조에서 이러한 바이트 행한 복사 ..., 그리고 모든 것이 잘 작동합니다. 이제 문제는
XDensity
및
YDensity
변수에 저장된 값이 매우 높다는 것입니다 (
X:24576,Y:24576
16 진수 편집기에서 이미지 읽기). 이 값은 이미지의 실제 너비와 높이가 될 수 없습니다.
Units
의 값은
0x01
입니다. 즉, 단위는 "인치당 픽셀"입니다.
이 값에서 실제 이미지 해상도 1024x826
을 어떻게 얻을 수 있습니까? 이것이 올바른 방법이 아닌 경우 나에게 다른 방법을 알려주세요.
24567 = 0x6000. 두 바이트를 잘못된 순서 = 0x0060 = 96으로 읽으므로 스왑하십시오. 96 dpi는 매우 일반적인 값입니다. 자신의 jpeg 디코더를 작성하지 마십시오. –
그래, 그게 내가 생각한거야. 예제 코드를 보았습니다. 감사. –