2009-12-11 6 views
0

지난 몇 주 동안 나는 아이폰에서 작동하는 타일링 메커니즘을 얻으려고 내 머리를 찢어 버렸습니다. 스크롤 뷰에서 요청할 타일로 저장할 수 있도록 약 150MB 크기의 이미지를 자르고 크기를 조정해야 사용자가 고해상도로 이미지를 볼 수 있습니다.iPhone에서 거대한 이미지 스케일링 및 자르기

문제는 이러한 이미지가 iPhone이 처리 할 수있는 범위를 정말로 압박하고 있다는 것입니다. 이 거대한 이미지를 1000 개 정도까지 스케일링하고 그 타일링을하는 것은 꽤 쉬운 것처럼 보이지만 큰 줌 레벨의 경우 중간 크기로 확장해야합니다. 말하자면 4000 개가 너무 커요. 그래서 나는 전체 크기의 이미지로부터 중간 크기의 블록을 만들고 그 각각과 미디어 줌을 바둑판 식으로 배열한다는 생각에 착안했습니다.

내부 루프 주위에 autoreleasepool을 생성하고 각주기마다 메모리를 절약 할 수 있습니다.하지만 대부분 메모리를 제어 할 수 있지만 때로는 나에게 무작위로 보입니다. 메모리가 누출되거나 최소한 유출되지는 않습니다. 나는이 모든 것을 보조 스레드에서하고 있는데, 그 스레드의 첫 번째 함수로 돌아 오면 스레드의 자체 autoreleasepool을 해제하고 마지막 메모리 아티팩트는 지워집니다. 그것은 시뮬레이터를 귀찮게하는 것처럼 보이지 않지만 아이폰은 훨씬 덜 용서하고 그것은 전체 기와 프로세스를 완료하기 전에 충돌합니다. 내가 사용 자르기 코드는 다른 사람이 이전에 같은 대규모의 이미지를 다루는 있었나요

http://www.hive05.com/2008/11/crop-an-image-using-the-iphone-sdk/

Hive05

에서입니까? 사전 생성 타일이 가장 좋은 방법입니까? 왜 일부 루프가 메모리를 증가시키고 일부는 증가시키지 않는지, 또는 자동 풀링 된 모든 것을 강제로 외부 풀을 기다리지 않고 내부 풀에서 지우는 방법에 대한 제안은 무엇입니까?

지금까지 읽어 주셔서 감사합니다. GOT는 추가 할

는, 이러한 이미지 TIFs, 그래서 아마 비트 맵 정보를 직접 읽기 확장 및 전체 것은 모든

답변

0

저는 1024x1024의 타일을 순환하는 루프를 작성하고 iPhone 3G는 처리를 완료 할 수있었습니다. 그것은 30 분 이상 걸리지 만 그렇게 좋지는 않지만 핸드폰으로 150Mb TIF로 작업 할 때 얻을 수있는 것입니다.

메모리 사용량을 낮게 유지하기 위해 각 반복 후에 AutoReleasepools를 소진해야했습니다. Apple Tech Support는 iPhone이 가비지 수집 환경이 아닌 참조 계산 환경이기 때문에 각 내부 루프의 시작 부분에 새로운 AutoReleasePool을 생성하고 이전 단계에서 생성하는 것보다 각 루프가 끝날 때 배출하는 것이 바람직하다고 지적했습니다 모든 루프가 시작되고 루프가 완료되면 여러 번 배출 한 다음 해제하십시오. 변경하기 전까지는 내 응용 프로그램이 iPhone을 충돌하지만 시뮬레이터에서 제대로 실행됩니다.

0

먼저 자르기보다 더 나은 것, 나는 150이 심각한 의심이 MB 이미지는 우리가 3GS에 대해 이야기하고 있다고해도 기기의 메모리에 맞을 것입니다. 그 하나는 타사 애플 리케이션에 대한 128 MB의 사용 가능한 메모리가 최대 있습니다. 장치 콘솔 메시지를보고 메모리 경고를 찾으십시오. 충돌이 발생하기 전에 이미지를로드하려고 할 때 앱에서 해당 경고가 표시됩니다. 청크로 비트 맵 정보를 읽는 것이 더 현명 해 보일 것입니다. 한 번에 작은 섹션을 관리하게 될 것입니다. Cocoa에 랜덤 액세스 파일 API가 있다고 생각하지 않으므로 C 함수를 사용해야합니다.

+0

확실히 iPhone 3G에서 수행 할 수 있습니다. 그것이 내가 가지고있는 것이고, 중간 크기의 블록 몇 개를 타일링 할 수 있기 전에 모든 블록을 너무 많이 만들 수 있습니다. 그리고 본질적으로 타일을 붙일 수 있다면 타일로 칠할 수 있습니다. 그저 그 사이의 메모리를 적절하게 제거하고 프로세스를 반복하면됩니다. 나는 C 함수가 아마도 다음 단계라고 생각하지만 아무것도 진행하지 않을 루프를 얻으려고 너무 좌절감을 느끼고 있지만 어떻게 진행해야할지 모르겠다. – Craig