2011-10-22 3 views
0

저는 UIImagePicker의 복제본이지만 Assets 라이브러리를 사용하는 앱을 작성하고 있습니다. 사용자가 사진을 선택하면 이미지를로드하는 데 너무 오래 걸립니다. 나는 내가 개발하고있는 것과 동일한 기능을 가진 사진 앱을 사용할 때 이미지 로딩 속도가 조금 빨라진다는 것을 알아 차렸다. 이 사이트의 다른 응답자가 사진 앱의 기능을 모방하기 위해 다음을 언급했다고 들었습니다.자산 라이브러리를 사용하여 이미지로드 속도를 높이려면 어떻게해야합니까?

"미리보기 이미지를 가장 먼저로드하십시오 (dispatch_async가 가장 좋음). 위와 같이 전체 화면 이미지를로드하십시오.이 사진 앱을 사용하면 부드러운 사용자 환경을 제공 할 수 있습니다. "

누구에게 코드 샘플을 제공합니까? 나는 그가 의미하는 바를 잘 이해하고 있는지 확신 할 수 없다.

또한 여기서 I는 (I 다른보기 제어기 파라미터로 영상을 전달하고있어) 이미지를로드하는 데 사용하고있는 내 코드이다

myImage = [UIImage imageWithCGImage:[[myAsset defaultRepresentation] fullScreenImage]]; 
+0

이미지 선택 도구 복제본에 표시 할 이미지의 미리보기 이미지를 아직로드하지 않았습니까? – huesforalice

+0

@huesforalice 그래,하지만 그 후에는 전체 화면 이미지를 수행하는 경우 어떻게 빨리 변환하거나 어떻게 부드럽게 변환하는지 잘 모르겠다. –

답변

4

클래스 ALAsset를 얻는 두 가지 방법이있다 작은 이미지 :

- (CGImageRef)thumbnail 
- (CGImageRef)aspectRatioThumbnail 

자산의 전체 화면 크기 버전을 얻는 것보다 빠릅니다.

또한 비동기 작업으로 래핑 할 수 있습니다. 주 스레드에서 UI를 업데이트해야합니다. 대략 다음과 같이 : 당신이 동영상의 썸네일을 확보해야하는 경우

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW, 0), ^{ 
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; 
    /* obtain the image here */ 
    dispatch_async(dispatch_get_main_queue(), ^{ 
     /* update screen here */ 
    }); 
    [pool drain]; 
}); 

당신은 AVAssetImageGenerator를 사용해야합니다. 그것들을 비동기 적으로 획득하는 방법이 있습니다.

Apple 샘플 코드 (AVEditDemo 및 기타 저작물 라이브러리를 사용하는 다른 사용자)를 찾으십시오.

+0

고마워요! 솔루션에 대한 몇 가지 질문이있었습니다. 1) aspectRatioThumbnail을 사용하면 이미지를 확대합니다. 전체 화면 이미지를 사용하고 축소 한 것처럼 결과가 sme가됩니다. IE는 동일한 품질을 생산합니까? 2) 스레드에서로드하는 이유는 무엇입니까?로드하는 동안 창 전환이 발생할 수 있습니다. 내가로드하는 동안 윈도우 전환이 어떻게 발생합니까? 어떻게 든 그 블록을 매개 변수로 사용하여 위에있는 코드 줄에서 어떻게 든 이미지를 반환하게 할 수 있습니까? –

+0

아니요, 전체 화면으로 표시하려면 화면 크기를 사용해야합니다. 그렇지 않으면 화면이 흐려질 수 있습니다. 이미지로드와 관련하여 백그라운드에서 축소판 및 이미지를로드하는 별도의 스레드를 가질 수 있습니다. 그런 다음 데이터를 가져 오면 주 스레드에서 화면을 업데이트하십시오. 3 문장으로는 쉽게 설명 할 수 없습니다. 사과 샘플 또는 github에서 예제를 검색하십시오. – djromero

관련 문제