2012-02-10 2 views
0

JPEG 파일을 찾을 수있는 프로그램을 작성하는 작업이 있습니다. 그러나 문제는 일부 JPEG 파일에는 수백 메가 바이트의 큰 크기가 있다는 것입니다. 그래서 질문 : jpeg 파일 자르기 가능하지만 모든 파일을 RAM에로드하지 않고 fseek()와 같은 것을 사용하지 않고 필요한 부분 만 디코딩 할 수 있습니까?자르기 큰 jpeg

그럴 수 있습니까? 그렇다면 어쩌면 일부 라이브러리가 동일 할 수도 있습니다.

업데이트. 이 모든 것이 딥 줌 기술에 사용됩니다. 따라서 딥 줌을 사용하면 파일을 요청할 때이 프로그램에서 제공하지만, 실시간으로 실행해야합니다.

+3

대용량 파일이 실제로 문제가되었는지 확인 했습니까? 컴퓨터는 요즘 RAM이 있으며 실제 메모리가 충분하지 않을 때는 디스크에 페이지를 넣습니다. 큰 jpeg를 먼저 자르면 퍼프를 볼 수 있습니다. 발행물. 그리고 ... 조숙 한 최적화는 모든 악의 뿌리입니다. –

+0

이것은 숙제 프로젝트처럼 의심스러운 것 같습니다. – Edwin

+0

괜찮지 만,이 유틸리티는 실시간으로 작동해야하며 더 큰 파일 (맵)이 있습니다. 가장 큰 것은 4GB이고, 실시간으로 작동하는 것은 불가능합니다. tou가 RAM에로드한다면 – briskly

답변

5

두 가지 방법이 있습니다.

첫 번째는 무손실 자르기로서 파일을 모두 디코드하지 않지만 8x8 DCT 블록으로 작업합니다. 이 기능이있는 라이브러리를 사용해야하며 자르기 기능에 몇 가지 제한 사항이 있습니다. DCT 사각형에없는 경계로자를 수 없으므로 파일의 서브 샘플링에 따라 8 또는 16의 배수로 제한됩니다.

두 번째 방법은 한 번에 한 줄씩 읽고 쓸 수있는 라이브러리를 사용하는 것입니다. 나는 IJG library이 이것을 할 수 있으며 아마도 다른 것들도 할 수 있다는 것을 압니다. 이것은 쉬운 방법이지만, 이미지가 감압/재 압축 통과를 거쳐 품질이 떨어지거나 더 커질 수 있다는 단점이 있습니다.

+0

많이 고맙습니다. 나는 첫 번째 방법을 시도 할 것입니다. – briskly

관련 문제