iPhone 애플리케이션에서 이미지를 예압?
-
18-09-2019 - |
문제
짧은 시간에 표시하는 데 필요한 일련의 이미지가 있습니다 (PNG 시퀀스). 총 31 개의 PNG가 있으며 각각은 약 45KB입니다. 이미 다음 코드로로드했습니다.
imgArray = [[NSMutableArray alloc] init];
for(int i = 0; i <= 30; i++) {
NSString * filename = [NSString stringWithFormat:@"img_000%.2d.png", i];
UIImage *temp = [UIImage imageNamed:filename];
[imgArray addObject:temp];
[temp release];
temp = nil;
}
이미지를 표시하기 위해 다음 코드를 사용합니다.
CGImageRef image = [(UIImage *)[imgArray objectAtIndex:imgFrame] CGImage];
imgLayer.contents = (id)image;
if(imgFrame < 29) {
imgFrame++;
} else {
imgFrame = 0;
imgLayer.hidden = TRUE;
[imgTimer invalidate];
}
여기서 imglayer는 a CALayer
. (Imgtimer는 간격이 0.03s 인 반복 타이머입니다)
그러나 나는 이미지를 부를 때 처음에는 매우 느린 것을 발견했습니다. 첫 번째 모양을 제외하고 다른 외관은 아무런 문제가 없습니다.
사전로드 이미지와 관련이 있습니까? 아니면 내 이미지가 파일 크기가 너무 큽니까?
해결책
지연의 이유는 데이터를 프로파일 링하지 않고 말하기 어렵습니다. 그러나 여기에 도움이 될 수있는 트릭이 있습니다 : 모든 이미지를 하나의 큰 파일로 결합하십시오. 직사각형을 만들어보십시오 (아마도 6x6 또는 4*8). 그런 다음이 단일 파일을로드하고 각 이미지를 표시하기 위해 각 이미지를 자르십시오 (즉, 타일 크기의 디스플레이를위한 이미지를 만들고 다른 하나의 타일을 다른 쪽에서 디스플레이 이미지로 복사하십시오).
다른 팁
이미지는 사용 및 표시 될 때로드됩니다. 악기에서 Time Profiler를 사용하면 지연이 발생합니다. 그런 다음 해당 지연을 확대하고 원인이 무엇인지 살펴보면 일반적으로 "CopyImageBlocksetPng"가 "팽창"직전에 시간이 걸리는 기능임을 알 수 있습니다.
당신이해야 할 방법을 찾아야 할 것은 이미지를 만들고 필요하기 전에 강제로드하는 것입니다. 그것은 분명히 또 다른 이야기입니다.