2014-01-19 4 views
1

응용 프로그램의 일부로 jpeg와 같은 이미지 파일을 vw에로드하려고합니다. 이것은 매우 오래 걸리고 때로는 심지어 충돌이 일어나는 것 같습니다. 이미지는 약 3.5MB이며 단순한 JPEG 그림입니다. 문제의 원인은 다음과 같습니다.매우 느린 VisualWorks로 이미지 (그래픽)로드하기

ImageReader fromFile:'pic.jpg'. 

이 작업을 완료하는 데 5-10 초 정도 걸립니다. 그것은 32 비트와 64 비트 프로젝트에서 비슷하게 발생합니다.

이 문제를 해결하는 방법에 대한 아이디어 나 제안이 있으십니까? 파로와 똑같은 일이 잘된 것처럼 보입니다.

감사합니다. 직접 JPEGImageReader를 호출

+0

이것은 VW 7.10을 사용하고 있습니다. 다른 컴퓨터에 이전 설치가있을 수 있으며 나중에 시도 할 것입니다. –

답변

0

시도 :

JPEGImageReader FROMFILE : 그 빨리가 'pic.jpg'

후 둔화 파일에 사용할 적절한 이미지 리더를 찾는 것입니다. 어떤 ImageReaders를 설치했으며 어떻게 canRead 클래스 메소드를 구현합니까?

JPEGImageReader가 여전히 느린 경우 여기에서 조사 할 수 있습니다.

+0

나는 그것을 시험해 보았다. 흥미로운 현상은 '이미지 파일의 유형을 결정할 수 없습니다'오류가 발생한다는 것입니다. –

+0

JPEGImageReader를 직접 사용하는 위의 호출은 하위 클래스에서만 호출되기 때문에 작동하지 않습니다. AT Profiler를 사용하여 대부분의 시간이 소요되는로드 작업을 프로파일 링 할 수 있습니까? Karsten이 말했듯이, 이미지 압축 해제 알고리즘에서 뭔가있을 것 같습니다. 일반적으로 JPEG 압축 해제가보고하는 것보다 느린 것은 아닙니다. –

+0

읽으려고하는 JPEG 파일을 제공 할 수 있다면 문제를 파악하는 데 도움이됩니다. –

1

ImageReader는 JPEGImageReader와 같은 올바른 하위 클래스를 자동으로 선택합니다. 하위 클래스를 선택하는 것은 느린 부분이 아닙니다. JPG 데이터를 디코딩하는 것입니다.

PNG와 달리 ZIP 압축을 사용하지 않고 대신 이산 코사인 변환을 사용합니다 (https://en.wikipedia.org/wiki/JPG#JPEG_compression 참조). 이 압축은 많은 수의 크런치가 필요합니다. VisualWorks에서는 C보다 느립니다. 다른 한편으로는 PNG 리더가 Zlib을 사용하여 C에서 숫자 처리를 수행하므로 훨씬 빠릅니다.

속도를 높이려면 Cairo 또는 GDI 또는 다른 C-API를 사용할 수 있습니다.

+0

그 프로젝트에 추가 된 이미지 리더가 canBeRead :에서 비효율적 인 테스트를 사용했다고 생각할 수 있습니다. 그래서 내가 물었다. 문제가 압축되어있을 가능성이 큽니다. –