2009-05-14 6 views
1

이것을 상상해보십시오 : 나는 곰 인형 또는 삼각형을 나타내는 PNG 이미지를 가지고 있습니다. 비 이차원적인 것. 이제, 나는 실제 행해지는 이미지가 시작되는 주어진 행과 방향 (UIImageView의 좌표계에 대한 상대 좌표)을 알기를 원합니다.투명도가있는 PNG 안의 경계 좌표를 자동으로 찾는 방법은 무엇입니까?

예 : 마지막 줄을 볼 때 테디 베어의 다리가 왼쪽에서 시작하는 위치를 알아야합니다. 물론 그것은 단지 프레임이 아닙니다. 원점 x는 발이 2 차가 아니기 때문에 발생합니다. 어딘가 x = 12에서 시작할 수 있습니다.

어떻게 든 이미지 데이터를 반복하고 픽셀을 검사합니다. "이봐, 너 투명하니?". 그리고 만약 그렇다면, 나는 다음으로갑니다. "이봐, 너 뭐니 뭐니? 투명?". 내가 결과를 얻을 때까지 : "아뇨, 완전히 불투명 해요!". 그렇다면 나는 알고있다 : "맞다, 발은 PNG에서 시작된다! 그것이 경계 다."

그런 다음 모든 행마다이를 수행하여 경로 좌표를 얻습니다. 개인적으로, 회전 보정에 완벽한 지점을 감지하려면이 기능이 필요합니다. 바닥에서 사실적인 흔들림을 만들고 싶습니다. 나는 프레임 폭과 원점 정보를 사용할 수 없다. 현실적이지 않을 것입니다.

So : 픽셀이 투명한지 여부를 확인하기 위해 UIImage 또는 이미지의 데이터를 인트로 스 (introspect)하는 방법이 있습니까?

+0

더 깊은 충돌 감지에 유용 할 수있는 것과 동일한 것을 찾고 있습니다. –

+0

사실 깊은 충돌 감지에 중요합니다. 나는 게임 개발자가 정확히 이것을 알고있다. – Thanks

답변

1

알려진 형식으로 메모리 내 컨텍스트를 만드는 것이 더 쉬운 경우가 있습니다. 메모리 컨텍스트. 대상 컨텍스트는 읽기 쉽도록 원래 이미지와 다른 비트 맵 형식 및 색상 모드가 될 수 있습니다. 당신이 처벌을위한 대식가 인 경우

또는, 당신은 ... 픽셀 포맷 데이터를 디코딩 한 후, 픽셀 포맷을 결정하는 코드를 작성 할 수있는 CoreGraphics 함수를 사용하여 다음의있는 UIImage의의 CGImage 속성을 얻을 수 있습니다

마지막 옵션 : 사용중인 이미지를 제어하는 ​​경우 : 이미지에서 마스크 이미지 (1 비트 알파)를 만든 다음 가장자리를 결정할 때이 이미지를 사용하십시오. 그래픽 편집기에서 이러한 마스크를 쉽게 만들 수 있습니다. 또는 그림 속성을 올바르게 설정하면 이미지를 1 비트 메모리 내 컨텍스트로 그릴 수 있습니다.

+0

알려진 형식으로 메모리 내 컨텍스트를 만드는 방법은 무엇입니까? – Thanks

+0

사실, 아래의 앤디의 대답은 꽤 좋은 예와 관련이 있습니다. –

2

UIImage를 사용하여이를 쉽게 수행 할 수있는 방법이없는 것처럼 보입니다. 대신, 두 가지 간단한 옵션이 있습니다.

사용중인 이미지를 제어하는 ​​경우 이상적으로 필요한 데이터를 미리 계산할 수 있습니다. 그런 다음 이미지의 중심에 관심있는 점 (너비와 높이만으로 쉽게 클라이언트 쪽을 계산할 수 있도록)을 다시 형식화하거나 이미지와 함께 좌표를 보낼 수 있습니다. 이렇게하면 클라이언트가 각 이미지에 대해 다시 계산해야하는 번거 로움을 줄여 응용 프로그램 속도를 높이고 배터리 수명을 줄일 수 있습니다.

또는 libpng과 같은 이미지 라이브러리를 프로그램에 정적으로 컴파일 할 수 있습니다. 이미지를로드하고 처리 한 다음 언로드하여 파일을 UIImage로 전달할 수 있습니다. 사용하는 함수 만 링크되므로 렌더링 루틴이 생략 될 수 있으므로 너무 많은 부 풀림을 피할 수 있습니다. 이것은 소프트웨어가 타사 라이브러리에 의존하게 만드는 단점이 있습니다.

3

그물에 화면의 각 픽셀의 UIColor (ARGB) 값을 얻을 수있는 곳에서 this tutorial이 발견되었습니다. 어쩌면 당신이 조금 tweek UIImage를 전달하고 필요한 모든 값을 얻을 수

+0

그래도 작동하지만 이미지의 복사본을 만들어 하나의 픽셀을 추출합니다. 분명히 원래 포스터의 응용 프로그램에 대해 캐시합니다. –

+0

복사는 일종의 "표준화 된"그래픽 컨텍스트를 얻기 위해 수행됩니다. CG는 컨텍스트를 이미지에서 지정된 것으로 변환합니다. 그러면 픽셀을 반복 할 수 있습니다. 음, 이론적으로. 실습에서 그것은 알파에서 작동하지 않았습니다. 결과는 매우 안전하지 않습니다. – Thanks

관련 문제