지난 몇 주 동안 나는 아이폰에서 작동하는 타일링 메커니즘을 얻으려고 내 머리를 찢어 버렸습니다. 스크롤 뷰에서 요청할 타일로 저장할 수 있도록 약 150MB 크기의 이미지를 자르고 크기를 조정해야 사용자가 고해상도로 이미지를 볼 수 있습니다.iPhone에서 거대한 이미지 스케일링 및 자르기
문제는 이러한 이미지가 iPhone이 처리 할 수있는 범위를 정말로 압박하고 있다는 것입니다. 이 거대한 이미지를 1000 개 정도까지 스케일링하고 그 타일링을하는 것은 꽤 쉬운 것처럼 보이지만 큰 줌 레벨의 경우 중간 크기로 확장해야합니다. 말하자면 4000 개가 너무 커요. 그래서 나는 전체 크기의 이미지로부터 중간 크기의 블록을 만들고 그 각각과 미디어 줌을 바둑판 식으로 배열한다는 생각에 착안했습니다.
내부 루프 주위에 autoreleasepool을 생성하고 각주기마다 메모리를 절약 할 수 있습니다.하지만 대부분 메모리를 제어 할 수 있지만 때로는 나에게 무작위로 보입니다. 메모리가 누출되거나 최소한 유출되지는 않습니다. 나는이 모든 것을 보조 스레드에서하고 있는데, 그 스레드의 첫 번째 함수로 돌아 오면 스레드의 자체 autoreleasepool을 해제하고 마지막 메모리 아티팩트는 지워집니다. 그것은 시뮬레이터를 귀찮게하는 것처럼 보이지 않지만 아이폰은 훨씬 덜 용서하고 그것은 전체 기와 프로세스를 완료하기 전에 충돌합니다. 내가 사용 자르기 코드는 다른 사람이 이전에 같은 대규모의 이미지를 다루는 있었나요
http://www.hive05.com/2008/11/crop-an-image-using-the-iphone-sdk/
Hive05
에서입니까? 사전 생성 타일이 가장 좋은 방법입니까? 왜 일부 루프가 메모리를 증가시키고 일부는 증가시키지 않는지, 또는 자동 풀링 된 모든 것을 강제로 외부 풀을 기다리지 않고 내부 풀에서 지우는 방법에 대한 제안은 무엇입니까?지금까지 읽어 주셔서 감사합니다. GOT는 추가 할
는, 이러한 이미지 TIFs, 그래서 아마 비트 맵 정보를 직접 읽기 확장 및 전체 것은 모든
확실히 iPhone 3G에서 수행 할 수 있습니다. 그것이 내가 가지고있는 것이고, 중간 크기의 블록 몇 개를 타일링 할 수 있기 전에 모든 블록을 너무 많이 만들 수 있습니다. 그리고 본질적으로 타일을 붙일 수 있다면 타일로 칠할 수 있습니다. 그저 그 사이의 메모리를 적절하게 제거하고 프로세스를 반복하면됩니다. 나는 C 함수가 아마도 다음 단계라고 생각하지만 아무것도 진행하지 않을 루프를 얻으려고 너무 좌절감을 느끼고 있지만 어떻게 진행해야할지 모르겠다. – Craig