C#에서 어떻게합니까? 나는 웹 전체를 보았지만 대답을 찾을 수 없었다.C#에서는 이미지 (jpg, gif 또는 png)가 인터레이스 (비 프로그레시브) 또는 비 인터레이스 (프로그레시브)인지 여부를 어떻게 결정합니까?
4
A
답변
6
GIF spec에 따르면 gif 이미지의 바이트 스트림은 헤더의 경우 6 바이트로 시작하고 "논리적 화면 설명자"의 경우 7 바이트로 시작합니다.
논리 화면 설명자의 다섯 번째 바이트는 "묶음 필드"바이트입니다. 이미지에 전역 색상 표가 포함 된 경우 "묶음 필드"의 첫 번째 비트가 설정됩니다. 마지막 세 비트는 전체 색상 표의 크기를 3 x 2^(X+1)
으로 계산하는 데 사용할 수있는 숫자 X입니다.
그런 다음 전역 색상 표 (있는 경우)를 따릅니다. 이 부분을 건너 뛰려면 위와 같이 계산하여 크기를 알아야합니다.
그런 다음 10 바이트 "이미지 설명자"를 따릅니다. 마지막 바이트는 또 다른 "압축 된 필드"입니다. 이미지가 인터레이스 된 경우 해당 바이트의 두 번째 비트가 설정됩니다.
public bool IsInterlacedGif(Stream stream)
{
byte[] buffer = new byte[10];
int read;
// read header
// TODO: check that it starts with GIF, known version, 6 bytes read
read = stream.Read(buffer, 0, 6);
// read logical screen descriptor
// TODO: check that 7 bytes were read
read = stream.Read(buffer, 0, 7);
byte packed1 = buffer[4];
bool hasGlobalColorTable = ((packed1 & 0x80) != 0); // extract 1st bit
// skip over global color table
if (hasGlobalColorTable)
{
byte x = (byte)(packed1 & 0x07); // extract 3 last bits
int globalColorTableSize = 3 * 1 << (x + 1);
stream.Seek(globalColorTableSize, SeekOrigin.Current);
}
// read image descriptor
// TODO: check that 10 bytes were read
read = stream.Read(buffer, 0, 10);
byte packed2 = buffer[9];
return ((packed2 & 0x40) != 0); // extract second bit
}
당신이 그 사양을 읽으면 바이트 스트림의 유사한 검사, JPG 및 PNG를 위해 할 수있는 의심의 여지가.
관련 문제
- 1. .gif, .jpg 또는 .png를 꺼내는 방법
- 2. gif, jpg, png 등을 사용하여 이미지 업로드
- 3. 표 비 널 또는 비 제로의 열 수를 카운트
- 4. 셀레늄을 사용하여 비 입력 또는 비 제어 요소를 '클릭'
- 5. JPG, GIF 및 PNG에 프로그레시브 이미지 디스플레이를 사용하면 어떤 이점이 있습니까?
- 6. 동적 사용자 인터페이스, WPF 또는 비 호환?
- 7. 배경, 스프라이트 또는 1px png가 반복되는 CSS
- 8. 비 직사각형 이미지
- 9. 비 투명 이미지
- 10. JBoss의 "javax.servlet.ServletException : 비 HTTP 요청 또는 응답"
- 11. 비 ASCII char 또는 C++의 정수
- 12. NSString (포인터/비 포인터) 할당 또는 유지
- 13. 정규식에서 그것은 게으른 또는 비 탐욕이라고?
- 14. 비 독점적 가상 이미지 클라이언트?
- 15. paperclip - tiff 이미지를 jpg 또는 png로 변환
- 16. 사용자가 프로그램에서 대기 중인지 여부를 어떻게 결정합니까?
- 17. 파일 시스템 또는 DB에 이미지 (jpg, gif, png)를 저장 하시겠습니까?
- 18. 모든 데이터를 받기 전에 어떻게 인터레이스 된 PNG를 보여줄 수 있습니까?
- 19. SFINAE 비 멤버 함수의 존재 여부를 확인하려면
- 20. tiff 파일의 이미지 크기는 어떻게 결정합니까?
- 21. PHP에서 이미지 (GIF, JPG, JPEG, PNG)를 TIFF로 변환하는 방법?
- 22. UIImageView의 망막/비 망막 이미지
- 23. 스트리밍 또는 프로그레시브 다운로드 비디오에 VideoView 사용
- 24. Droid 브라우저로 스트리밍 비디오 (또는 프로그레시브 다운로드)
- 25. 가비지 컬렉터는 개체가 가비지 여부를 어떻게 결정합니까?
- 26. XPath 표현식이 노드 집합이되는지 여부를 어떻게 결정합니까?
- 27. CGPath를 JPG 또는 PNG로 내보내기
- 28. TimThumb 비 공용 폴더 또는 가상 폴더의 그림 사용
- 29. Windows 클립 보드에서 jpg 또는 png를 어떻게 읽습니까?
- 30. Java : 이미지 로더 라이브러리 (JPG, PNG, GIF, TIFF, TGA)