2011-12-16 2 views
3

iOS 사진 앱을 만들고 있습니다. 이렇게하면 최대 약 2500x1600 픽셀의 동적 크기 이미지를 만들어야합니다. 일단이 이미지가 생성되면 우리는 큰 이미지 위에 작은 이미지를 합리적으로 빨리 그려 넣기를 원합니다.iOS : 화면보다 큰 이미지를 만들고 끌어와 저장하는 방법은 무엇입니까?

우리가 볼 수있는 것처럼 문제는 화면 해상도보다 큰 컨텍스트를 얻는 것이 불가능하다는 것입니다. 호출이 중단되지 않지만 nil 컨텍스트를 반환합니다. 그런 겉으로는 간단한 작업을 어떻게 성취 할 수 있습니까?

두 번째로이 컨텍스트가 만들어지면 큰 이미지 위에 주어진 위치에 작은 이미지를 그릴 수있는 가장 빠른 방법은 무엇입니까?

편집 :

우리는 해결책을 발견. width 및 height 매개 변수가 int가 아닌 float으로 설정되었으므로 CGBitmapContextCreate는 nil을 반환합니다. 때로는 해결책이 바로 앞에 있으며, 너무 눈이 멀어서 볼 수 없습니다. 바라건대이 대답은 어떻게 든 같은 문제가 다른 사람들을 도울 수 있습니다.

+0

한계는 화면 크기가 아니라 메모리라고 생각합니다. WWDC 2010 비디오의 메모리가 너무 큰 이미지를 표시하는 문제에 관해서는 매우 잘 설명합니다 (사용자가 요구하는 것이라면). – matt

+0

글쎄, 나는 그렇게 생각하지 않는다. 최악의 경우에도 2500x1600x4bpp = 16MB이며 이는 여전히 휴대 전화의 한계에 있습니다. 실제로는 훨씬 더 낮을 것입니다. 이 호출은 아무런 컨텍스트를 반환하지 않으며, 물론 이것은 아무 것도 사용할 수 없습니다. 비트 맵 컨텍스트가 화면 해상도로 축소되면 모든 것이 작동합니다. – Pedery

+0

굉장, 페 디스. 기회가 생기면 답변으로 게시하고 동의하십시오! – s4y

답변

1

정수 폭과 높이를 CGBitmapContextCreate의 인수로 지정했는지 확인하십시오. 그렇지 않으면 nil이 반환됩니다. 그렇지 않으면 컨텍스트의 크기는 메모리를 충분히 확보 할 수있는 한 중요하지 않습니다.

0

이 ARGB 픽셀의 2500x1600x4 바이트 귀하의 경우 배수, 당신은 할당 할 수있는 거의 모든 비트 맵/malloc에 ​​충분한 메모리에 대한 컨텍스트를 얻을 수 있어야한다.

CATiledLayer를 사용하여 작은 이미지로 덮여있는 타일을 그리면됩니다. GPU 텍스처 캐시에 맞출 수있는 최대 타일 크기로 제한된 구형 장치를 지원하려면 타일을 사용해야 할 수도 있습니다.

관련 문제