2013-11-25 3 views
0

비트 맵을 감싸는 클래스가 있는데 SetPixel 또는 GDI +를 통해 비트 맵이 변경되었는지 알 수있는 방법이 필요합니다.비트 맵이 수정되었는지 확인

정확한시기를 알 필요가 없습니다. 지난 번 확인한 이후로 문제가 발생했는지 알려주는 방법이 필요합니다.

자, 저는 이미 Bitmap 클래스에 포장되어 있지 않은 것으로 가정하고 있습니다. 그래서이 문제를 해결하는 가장 좋은 방법은 무엇일까요?

GetPixel 및 SetPixel에 대한 자체 래퍼 함수를 ​​제공 할 수 있지만 다음 GDI를 사용하여 비트 맵 변경 한 경우 잘 모르겠습니다. 나는 그 포장지를 만들 수도 있지만 그것은 정말로 엄청난 과잉이라고 생각된다.

또 다른 가능한 옵션은 복사본을 저장 한 다음 픽셀 단위로 확인하는 것입니다. 이것은 분명히 작동 할 것이고 쓰기는 쉽지 않을 것이지만 그것은 나의 필요에 비해 너무 느리다.

답변

1

해시 또는 체크섬을 사용해야합니다. 쉬운 방법이 몇 가지 있지만 가장 간단한 방법은 string hash 클래스에 다음 비트 맵/이진 문자열/당신이 그것을 저장하는 모든 컨테이너 GetHashCode() 호출 할 것입니다 것이라고 생각합니다. 클래스 속성, 해당 값에 대해 현재 해시 코드를 확인하여 변경된 사항이 있는지 확인하십시오. 당신은 또한 당신의 자신의 작은 체크섬 기능을 쓰거나 제 3 자 선택권의 광대 한 배열에서 (나는 확실하다) 선택할 수 있었다.

+0

이것은 멋지지만 어쨌든 모든 픽셀을 반복하여 계산 한 해시가 아닙니다. 어떻게 그들을 반복하고 하나 하나씩 확인하는 것보다 더 빠릅니까? –

+0

@LukaHorvat 더 빠를 수는 없습니다. 물론 당신이 쓰는 것보다 그 메서드를 호출하는 것이 더 간단합니다. 그리고 그 메서드가 매우 최적화되었다고 상상해 봅니다. 파일이 변경되었는지 여부를 확인하는 유일한 방법은 바이너리를 보는 것입니다. 해시/체크섬은이 작업을 수행하는보다 빠르고 간단한 방법입니다. – evanmcdonnal

+0

다른 체크섬/해싱 옵션이 있습니다. http://stackoverflow.com/questions/10520048/calculate-md5-checksum-for-a-file 또한이 방법을 지적하면 파일의 여러 사본을 저장할 필요가 없으므로 여기에 약간의 장점이 있습니다. 두 경우 모두 성능이 이보다 더 좋아지지는 않습니다. 해시/체크섬은 파일을 나타내는 고유 한 값입니다. 조금씩 비교하는 것을 피할 수는 없습니다. – evanmcdonnal

관련 문제