2010-05-09 2 views
3

두 개의 다른 이미지가있는 두 개의 이미지 뷰가 하나씩 있습니다. 사용자가 이미지를 터치하고 손가락을 움직이면 상단 이미지가 고정 된 반경의 터치 포인트를 따라 투명 해져야합니다. (PhotoChop 앱과 마찬가지로).터치로 CGImage (또는 UIImage)의 알파를 편집하고 표시하는 가장 빠른 방법은 무엇입니까?

현재 내가 이런 식으로하고있는 중이 야 ... 각 터치

  1. .
  2. 상단 이미지의 CGImage에서 이미지 버퍼의 복사본을 가져옵니다.
  3. 버퍼의 알파 채널을 편집하여 터치 포인트를 중심으로 투명한 원을 만듭니다.
  4. 버퍼에서 새 CGImage를 만듭니다.
  5. CGImage에서 UIImage를 만들고 새 UIImage를 맨 위 이미지보기의 이미지로 사용하십시오.

이 방법이 효과적이지만 사본이 너무 많아 생성이 복잡하고 느립니다.

누군가 나에게 똑같은 일을하는 더 빠른 방법을 제안 할 수 있습니까?

답변

1
CGImageCreateWithMask 

사용자가 그릴 때 CGBitmapContext을 변경하여 수정하십시오. 컨텍스트를 참조하는 연결된 CGImage을 유지하십시오. 원본과 마스크에서 마스크 된 이미지를 만들고 그 안에서 UIImage을 만듭니다.

CGImage 따라서 은 회색조 여야합니다. CGImageMaskCreate 또는 CGImageCreate을 사용하여 이미지를 만들 수 있지만 이전 이미지를 사용하는 것이 좋습니다.

내부가 확실하지 않지만, UIImage을 그릴 때마다 으로 끝나는 것이 좋습니다. 다른 말로하면 복사 된 것이 없다고 생각하고 UIImage가 포함 된보기에 setNeedsDisplay 만 있으면됩니다.

+0

나는 drawnonward의 답변에 대한 아이디어를 가지고있었습니다. 원래 이미지를 CALayer (A)의 내용으로 유지할 수있었습니다. (A)의 'mask'속성을 마스크 이미지로 설정하십시오. 사용자가 화면을 터치하면 마스크 이미지를 적절하게 수정하십시오. 나는 이것이 더 적은 메모리 복사본을 포함 할 수 있다고 생각한다. – nielsbot

+0

drawnonward : 귀하의 제안은 각 업데이트에 CGImage를 그려야합니까? CALayer + 마스크를 사용하는 것이 더 효율적인지 궁금합니다. – nielsbot