2009-07-28 4 views
7

가능하면 성능상의 이유로 이미지를 열지 않고 디스크의 높이/너비를 찾고 싶습니다.C에서 확장 이미지 속성 읽기

이미지의 Windows 속성 창에는 너비, 높이, 비트 심도 등의 정보가 들어있어 파일에 메타 데이터를 저장하고 있다고 생각합니다. 이 정보에 어떻게 액세스 할 수 있습니까?

+0

가능한 [C#을 사용하여 파일에서 EXIF ​​데이터를 가져 오는 방법] (http : // stackoverflow.com/questions/58649/how-to-get-the-exif-data-from-a-file-using-c) – jgauffin

답변

3

같은 이미지의 EXIF ​​정보를 읽는 방법에 대한 몇 가지 유래 질문이 있습니다 How to get the EXIF data from a file using C#

+0

EXIF ​​데이터는 파일 내부에 저장되므로 열 필요가 있습니다. OP의 기준을 충족시키지 못하는 것 - OP의 기준을 말하는 것이 아닙니다. –

+0

OP의 요구 사항은 비트 맵 데이터의 이미지와 할당 메모리를 압축 해제하는 것을 건너 뛰고 싶다고 생각합니다. 이 경우 메타 데이터에 액세스하는 것이 좋습니다. –

+0

IMO 그는 실제 이미지 데이터를로드하지 않는다는 것을 의미합니다. 메타 데이터를 열고 읽는 것이 좋습니다. 그렇지 않으면 파일을 검사 할 방법이 없습니다. 실제 병목 현상 병목 현상은 메타 데이터가 아닌 이미지 데이터를로드합니다. – huseyint

3

가장 쉬운 방법은 이미지가 정사각형이라고 가정하면 파일 크기를 바이트 단위로 가져 와서 제곱근을 취하는 것입니다. 이것은 너비와 높이가 될 것입니다.

256 bytes = 16px x 16px 

:-)

또는 당신이 사용하여 이미지의 EXIF ​​정보를 읽어보십시오이 codeplex library

+1

이미지가 정사각형이라는 큰 가정. – SteveM

+2

나는 Windows가 이것을 이렇게 빨리 계산 한 방법을 항상 생각해 보았습니다! – Brandon

+2

와우! 이미지가 사각형이 아닐 수 있습니다. Hmmmmmm 이것은 그것에 렌치를 던진다! ;) –

2

Windows는 메타 데이터를 파일 시스템의 특별한 위치에 저장하지 않습니다. 속성 창은 단순히 이미지 파일 자체에서이를 읽습니다.

.NET은 전체 이미지를로드하지 않고 이미지의 메타 데이터 만 읽을 수있는 기능을 제공한다고 생각하지 않습니다. 제한된 수의 다양한 이미지 형식 (예 : JPEG, PNG 및 GIF) 만 처리하는 경우 이미지 헤더에서 크기를 직접 읽지 않아야합니다.

반면에 많은 이미지 형식을 처리해야하는 경우 Unix file utility의 소스 코드를 살펴볼 수 있습니다. 그것은 많은, 많은 다른 이미지 포맷의 크기를 감지하는 것을 관리하고, 부팅하는 것이 엄청나게 빠르다.

2

이미지의 너비와 높이를 가져 오려면 으로 파일을 열고 헤더 정보를 구문 분석하여 원하는 방식으로 얻으십시오.

모든 색상/비트 맵 정보를 읽을 필요는없고 헤더 만 읽을 수 있습니다.

이것은 Windows에서 실제로 파일을 실행하지 않고 응용 프로그램 파일의 아이콘을로드하는 것과 같은 방법입니다.

0

당신이 마이크로 소프트 쉘 제어 및 자동화 구성 요소를 사용하여 Windows 탐색기에 표시되는 속성을 읽을 수 있습니다. 이것의 장점은 이미지 헤더를 파싱하기위한 제 3 자 라이브러리 (COM 개체가 이미 있음) 나 추가 코드가 필요없고 다양한 형식으로 작동한다는 것입니다.

샘플 코드는 related question에 대한 답변에서 찾을 수 있습니다.

4

System.Drawing.Image 클래스를 사용하십시오.

 Image img = Image.FromFile(fileName); 
     ImageFormat format = img.RawFormat; 
     Console.WriteLine("Image Type : "+format.ToString()); 
     Console.WriteLine("Image width : "+img.Width); 
     Console.WriteLine("Image height : "+img.Height); 
     Console.WriteLine("Image resolution : "+(img.VerticalResolution*img.HorizontalResolution)); 

     Console.WriteLine("Image Pixel depth : "+Image.GetPixelFormatSize(img.PixelFormat)); 
     Console.WriteLine("Image Creation Date : "+creation.ToString("yyyy-MM-dd")); 
     Console.WriteLine("Image Creation Time : "+creation.ToString("hh:mm:ss")); 
     Console.WriteLine("Image Modification Date : "+modify.ToString("yyyy-MM-dd")); 
     Console.WriteLine("Image Modification Time : "+modify.ToString("hh:mm:ss"));