문제

나는 비트맵을 로드에서 jpg 파일입니다.이미지가 24bit RGB,고 싶습니다.변환해야할 상당히 빠르다.이미지 나는 로드하는 거대(9000*9000 픽셀과 함께 압축 된 크기는 40-50MB).어떻게 할 수 있습니까?

Btw:내가 사용하고 싶지 않은 외부 라이브러리를 가능한 경우.하지만 알고 있는 경우에는 해당 오픈 소스 유틸리티 클래스를 수행하는 가장 일반적인 이미징 작업을 자세한 정보가 필요합니다.미리 감사드립니다.

도움이 되었습니까?

해결책

JPEG는 0xff 0xd8로 시작해야합니다. 그 후에는 다양한 필드를 형식으로 찾을 수 있습니다.

  1. 필드 식별자 2 바이트
  2. 필드 길이, 필드 식별자 제외. 2 바이트.
  3. 가변 데이터.

필드를 통해 구문 분석하십시오. 원하는 식별자는 0xff 0xc0입니다. 이것을 SOF0이라고하며 높이, 너비, 비트 깊이 등을 포함합니다. 0xff 0xc0은 필드 길이에 대해 두 바이트가 뒤 따릅니다. 그 뒤에는 비트 깊이를 나타내는 단일 바이트가 있습니다. 보통 8이됩니다. 그러면 높이에 대해 2 바이트, 너비는 2 개, 구성 요소 수에 대한 단일 바이트가 있습니다. 이것은 일반적으로 1 (Greyscale의 경우) 또는 3입니다.

다른 팁

이것은 무언가를 했는데,자신만 생각해야 할 수 있습니다 액세스하 사진 EXIF 정보로 시작합니다.

인 스콧 hanselman 은의 블로그 입력 에 액세스하 사진 EXIF 정보.

표준 .NET System.Drawing 네임 스페이스에는 필요한 모든 것이 있어야하지만 아마도 매우 효율적이지 않을 것입니다. 그것은 모든 것을 RAM에로드하고, 압축하지 않고, 그것을 변환 (아마 사본을 만들어)를 다시 압축하고 저장합니다. 고성능을 목표로한다면 C/C ++ 라이브러리를 살펴보고 .NET 포장지를 만들어야 할까봐 두렵습니다.

내가 아는 한 JPG는 항상 24 bpp입니다. 변경할 수있는 유일한 것은 RGB보다는 CMY (k?)라는 것입니다. 해당 정보는 헤더에 저장됩니다. 불행히도 비트 맵에로드가 자동으로 변환할지 여부를 테스트하기 위해 CMYK 이미지를 생성 할 수단이 없습니다.

다음 줄은 파일을 메모리로 읽습니다.

Bitmap image = Image.FromFile(fileName);

image.PixelFormat 이미지 형식을 알려줍니다. 그러나 파일로드가 24bpp RGB JPG 이외의 파일로 수행하는 작업을 테스트 할 수 없습니다. 나는 당신이 그것을 시도하는 것을 추천 할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top