2010-11-23 2 views
0

나는 무엇보다도 사용자가 사진을 저장할 수있는 iPhone 응용 프로그램을 가지고 있습니다. 새로운 사진이 앱의 데이터 저장소에 추가되면, 나는 사진 썸네일 그리드가 적당한 시간 내에로드되도록 이미지의 썸네일 버전을 캐싱한다.Retina 디스플레이의 저장된 이미지 업데이트

문제는 이러한 썸네일이 망막 전 화면에서 잘 보이지만 RD 디스플레이에서는 약간 흐리게 보입니다. 이미지를 사용할 수 없다는 것은 그리 나쁘지 않지만 이전 버전의 내 앱으로 저장 한 이미지 사용자를 위해 Retina Display의 모든 이점을 얻고 싶습니다.

문제는 모든 미리보기 이미지를 다시 만드는 것이 너무 오래 걸린다는 것입니다. 내 테스트에서 샘플 데이터베이스를 iPhone 4의 고해상도 축소판 (대다수)으로 다시 인코딩하는 데 약 1 ~ 2 분이 걸렸습니다. 이전 하드웨어에서는 훨씬 더 어려울 것입니다.

어떻게이 문제를 해결할 수 있습니까? 위와 같은 성능 결과를 고려할 때 일회성 마이그레이션을하는 것은 의문스러운 것처럼 보입니다. 다른 옵션은 섬네일을 느리게 축소 (즉, 화면에 표시됨) 한 다음 해당 시점에 데이터베이스에 저장합니다. 오래된 이미지로 가득 찬 화면은 처음 볼 때 느려지 며, 그 후에는 더욱 부드럽습니다.

다른 방법이 있습니까? 다른 누구든지이 문제에 직면 했습니까?

답변

-1

오래된 이미지가 가득 찬 화면은 처음 볼 때 느려지고 그 다음에 더 빨리지나갑니다.

부진하지 않아도됩니다.

고통의 비트이지만 대부분의 처리는 백그라운드 스레드에서 처리 할 수 ​​있습니다. UI를 너무 느리게하지 않도록 스레드 우선 순위를 낮은 값 (예 : 0.1)으로 설정하십시오. 가장 쉬운 방법은 변환해야하는 각 이미지에 대해 NSOperation을 설정하고 maxConcurrentOperationCount = 1을 사용하여 NSOperationQueue에 추가하는 것입니다.또는 -applicationWillTerminate : 쓰기가 원자 -applicationDidEnterBackground 아닌 경우

[queue cancelAllOperations]; for (NSOperation * operation in queue) { [operation setThreadPriority:1]; } [queue waitUntilAllOperationsAreFinished]; 같은 것을 할 (또는 뭔가 해당 통지 알림을 수신); 당신은 이미지 변환이 디스크에 쓰기를 끝내기에 충분해야하는 약 10 초 정도를 얻습니다. 추가 보호를 위해 쓰기 직전에 [operation isCancelled]을 확인하십시오 (10 초 이상 걸릴 수 있음). 분명히 -applicationWillEnterForeground :에서 변환을 다시 시작해야합니다 (일부 이미지는 이미 변환 된 것을 기억해야합니다).

동시성 문제가

이 ( [data writeToFile:path atomically:YES]가이 앱을 쓰기 중에 사망하는 경우 주위에 거짓말 임시 파일을 떠날 가능성이 높습니다 — 충분하지 않습니다 ... 추적 재미 있습니다. 나는 작은 이미지를 저장 권하고 싶습니다 가능하면 Core Data에 추가 할 수 있지만 기존 앱에 대해서는 문제가 될 수 있습니다.)

0
  1. 이미지를 시도하고 변환하는 아이디어가 좋지 않습니다.
  2. 사용자는 빨리 참을성이 없어지고 앱이 버그가 있으며로드하는 데 시간이 오래 걸릴 것이라고 말합니다.
  3. 저는 전체 크기 이미지를 다시 처리하지 않고도 상황을 해결할 수 있다고 생각합니다.
  4. 오래된 하드웨어에서는 망막 디스플레이가 없으므로 이미지를 업 사이즈 할 필요가 없습니다. 그들이 망막 디스플레이를 가지고 있다면 그들은 빠른 iPhone iPod을 가지고 있습니다.

축소판 이미지를 표시하는 방법으로 그래픽으로 문제를 해결하는 것이 좋습니다. 그래서 전체 화면 대신에이 이미지 주위에 테두리를 놓고 그 실제 해상도로 표시하십시오 (상향 조정하지 마십시오). 또는 일반적으로 1을 표시하는 4 개의 이미지를 표시합니다 (iPhone 화면은 4 배 해상도이기 때문에).

원래 거대한 이미지를 다시 샘플링하는 대신 미리보기 이미지의 바이 큐빅 업 샘플을 사용하여 4 배 크기로 만들 수 있습니다. 이것은 약간 흐리게 만들지 만, 실제로는 나빠질 것입니다 아이폰 스케일링보다 잘 보일 것입니다. 업 샘플링은 작은 이미지 작업으로 매우 빠릅니다.

업 샘플링을 도와 드릴 수는 없지만 어딘가에 약간의 코드가 있습니다.

환호, John.

+1

-1. 이미지는 GPU에서 텍스처로 효과적으로 처리되며, 기본적으로 바이 큐빅 보간법을 사용합니다 (필자가 아는 한). –

+0

DUDE! 너는 나를 꺾고 너는 옳지 않다. 비 망막 보간법을 사용하여 비 망막 디스플레이 이미지는 표시되지 않습니다. 화소가 두 배가됩니다. 1 픽셀은 동일한 색상의 4 픽셀이되고 픽셀 화되고 들쭉날쭉하게 보입니다. 바이 큐빅 (Bicubic)은 픽셀을 두 배로 늘리지 않아 훨씬 매끄러운 이미지를 제공합니다. 투표 해주세요. –

관련 문제