2012-12-12 3 views
1

이미지를 보유하는 다양한 셀 크기의 표보기를 사용하고 있습니다. 크기가 다양하므로 ALAsset fullScreenImage를 사용하여 캐시 된 축소판보다 높은 해상도를 얻습니다. 그러나 디스크에서 다소 큰 이미지를로드하고 있기 때문에 엄지 손톱이 거의 즉각적으로로드되는 반면 눈에 띄는 지연이 있습니다.전체 콘텐츠를 메모리에로드하지 않고 iOS에서 이미지 섹션을로드하려면 어떻게해야합니까?

특정 해상도 이미지 또는 이미지의 일부 (예 : 왼쪽 절반 또는 오른쪽 절반)를 디스크에서로드 할 수 있습니까? 나는 일반적으로 압축 된 jpeg이기 때문에 전체 내용을 메모리에로드해야한다고 생각 하겠지만, 고려하지 않은 것을 요청할 것이라고 생각했습니다.

답변

0

일부 이미지 형식에서는 가능하지만 jpeg 또는 png 파일에서는 가능하지 않습니다. iOS에서 API를 사용할 수 없기 때문에 직접 작성해야합니다. 단시간 만 지연되는 경우 비동기 GCD 대기열에로드를 래핑하고 더 높은 res 이미지가있는 동안 미리보기 이미지를 사용할 수 있습니다. 로드.

+0

그래, 비동기식 대기열을 완료했다. 나는 그것이 일반적으로 모든 것을 필요로하는 jpeg 압축 해제를 알고 있지만 어떻게 든 그것을 깨뜨리는 방법을 본 것처럼 보인다. – akaru

+0

이 페이지의 내 대답을 참조하십시오. – akw

+0

주어진 폭과 높이를 스케일링하여 원본 이미지를 그대로로드하고 싶습니다. 메모리에 원본 이미지를 저장하지 않아도됩니다. –

0

는이 같은 ALAssetsLibrary에서 원시의 jpeg 데이터를 읽을 수 있습니다 :

ALAssetRepresentation *rep = [self defaultRepresentation]; 
uint8_t *buffer = (uint8_t *) malloc(rep.size); 
NSUInteger buffered = [rep getBytes:buffer fromOffset:0.0 length:rep.size error:nil]; 

는 그런 다음 libjpeg을 활용하고 (8 개 픽셀 반올림)하기 만하는 구형을 디코딩 할 수있다. 참조를 위해 jpegtran 유틸리티의 출처를 참조하십시오.

stackoverflow에서 iOS 용으로 libjpeg을 컴파일하는 데 몇 가지 스레드가 있습니다.

희망이 도움이됩니다.

관련 문제