멋진 성능은 보이지 않지만이 방법에 접근하는 한 가지 방법은 원형 차트 이미지의 픽셀을 반복하는 것입니다.
원형 차트 이미지에 getImageData()
으로 전화하여 이미지의 모든 픽셀 데이터를 얻습니다 (즉, 최대 크기 요청). 마찬가지로 검색 할 플래그에 getImageData()
으로 전화하십시오. 원형 차트에서 얻은 모든 픽셀을 반복하는 루프를 설정합니다. 각 픽셀에 대해 검색중인 플래그의 왼쪽 위 (또는 반복 순서를 기반으로하는 다른 모서리)라고 가정합니다. 플래그 픽셀 데이터의 첫 번째 픽셀과 비교하고 일치하는 경우 플래그의 너비와 높이와 동일한 창 크기 내에서 반복합니다. 윈도우 반복과 각 픽셀 쌍의 끝에 도달하면 찾고있는 플래그를 발견했습니다. 일치하지 않으면 원형 차트 데이터의 다음 픽셀로 이동하고 창을 반복합니다.
최악의 경우 O([N * W * H] - [W * H])
또는 O(N * W * H)
을 N = pie chart pixels
및 W x H = flag dimensions
으로 보았습니다. 플래그가없고 윈도우를 더 지능적으로 이동시킴으로써 윈도우를 반복하지 않음으로써 아마 이것을 향상시킬 수 있습니다. 일단 당신이 일치하는 것을 찾으면, drawImage()
으로 전화하여 새로운 깃발을 위에 붙여 넣으려는 코너의 좌표를가집니다.
은 물론이 방법은 당신이 검색하는 플래그가 원형 차트의 이미지에 정확히을 나타내는 것으로 가정합니다. 압축되지 않은 플래그를 압축 된 원형 차트 이미지와 비교하거나 그 반대의 경우, 일치하는 항목을 찾을 수 없습니다. 마찬가지로 모든 크기 또는 방향 변화가이 접근법을 완전히 무효화합니다. 그런 종류의 유연성이 필요하다면, SIFT 영토와 같은 것을 탐구하고있는 것입니다. 캔버스 요소를 사용하여 구현할 수 있다고 확신하지만, 그렇게 할 수있는 사람이되고 싶지는 않습니다.
이 경우 반복을 수행하는 동안 DOM을 불필요하게 탐색하지 않아야합니다. 특히, 여기에 설명 된대로 픽셀 데이터에 대한 로컬 참조를 저장하려고합니다. http://www.onaluf.org/en/entry/13
이것은 사소한 일이 아닙니다. 자동화 되나요? 새 플래그가 이전 플래그보다 작 으면 백그라운드 픽셀은 어디에서 오는 것입니까? –
당신은 더 구체적이어야합니다. 원래 이미지를 어떻게 든 수정할 수있는 방법이 있습니까? –
이미지가 존재하지 않습니다. – epascarello