2016-08-25 5 views
1

두 개의 스프라이트 (QImage) = 투명한 배경을 가진 두 개의 그림이 있습니다. 스프라이트가 충돌하는지 알고 싶습니다. 두 개의 사각형이 겹치는 지 이미 확인합니다. 그러나 두 이미지가 실제로 겹치는 지 (빨간 영역)를 알고 싶습니다. 내 첫번째 생각Qt QImage - 스프라이트가 충돌하는지 확인하십시오.

enter image description here

는 QPainter를하고 QPainter를 :: CompositionMode_SourceIn 또는 QPainter를 :: CompositionMode_DestinationIn를 사용하여 두 영상을 중첩 화상 (핑크 직사각형)을 생성 하였다. 이렇게하면 이미지가 완전히 겹쳐져 새 이미지가 완전히 투명 해지지는 않습니다. 그러나 완전히 투명하게되어 있는지 확인하는 방법은 무엇입니까?

두 이미지가 실제로 매우 겹치는 지 어떻게 확인할 수 있습니까? 접근 방법은 무엇입니까?

+0

스프라이트가 얼마나 큰지 물어볼 수 있습니까? 크기가 충분히 작 으면 (예를 들어 32x32),'QImage :: constBits'에 의해 반환 된 합성 이미지 데이터를 단순히 스캔하면 좋습니다. 경계 사각형이 교차하는 경우에만 해당 검사를 수행하면됩니다. –

+0

스프라이트의 크기는 사용자가 선택합니다. 따라서 이미지는 크거나 작을 수 있습니다. – Junior

답변

0

접근 방법이 잘못되었습니다. 합성 이미지는 8 픽셀을 한 바이트로 묶는 비트 맵이 될 수 있습니다. 원본 이미지를 비트 맵 (투명 픽셀 = 0 값, 투명하지 않은 값 = 1 값)으로 변환 한 다음 AND로 결합한 다음 0이 아닌 값을 스캔합니다. 이것은 매우 빨라집니다 - 메모리 대역폭만큼 빠릅니다. 그러나 그것은 합성 이미지에 대한 메모리를 소비합니다.

투명하지 않은 조각을 나타내는 트리 노드를 사용하여 이미지 중 n-ary 공간 파티셔닝 트리를 생성하고 트리 1의 이미지와 겹치는 트리 2의 노드 만 포함하면서 트리를 병합하여 충돌을 감지 할 수도 있습니다 정액 논문 Merging BSP Trees Yields Polyhedral Set Operations은 알고리즘을 제공합니다.

벤치 마크는 어느 것이 더 빠르며, 하이브리드 접근 방식 (BSP가 특정 셀 크기, 비트 맵 표현까지)이 더 빠를지를 결정해야합니다.

관련 문제