두 개의 바이트 배열을 메모리에서 비교하고 차이를 보관할 데이터 구조를 만들어서 바이트 배열 B와 차이를 유지하는 데이터 구조로 바이트 배열 A를 다시 만들 수 있습니다.C# .net에서 2 바이트 배열의 이진 diff를 생성하는 방법이 있습니까?
바이트 배열은 항상 동일하고 상대적으로 작습니다. 바이트 배열은 일반적으로 1000x1000x32에서 128x128x32 크기의 비트 맵을 나타냅니다.
차이점을 보유하고있는 데이터 구조와 두 번째 바이트 배열을 조합하여 바이트 배열 A를 재구성하는 데 사용되는 속도와 효율성 (CPU 시간에서)은 가장 중요합니다. 차이 객체의 생성이 효율적이지 않은 것은 중요하지 않습니다.
지금 당장 내 해결책은 이진 탐색 + md5 해싱 방식을 사용하여 이미지 내에서 가장 작은 단위 차이 목록을 작성하고 바이트 배열 A 내부의 오프셋 참조를 사용하여 원시 바이트 데이터를 패키징하는 것입니다.
e 이미지 A의 바이트 배열에 대한 해시를 생성하고 이미지 B의 바이트 배열 해시 값과 비교합니다. 일치하지 않으면 이미지를 가로로 나누고 각 블록을 해시 한 다음 이미지 사이에있는 해시를 비교합니다.이 프로세스는 다음과 같습니다. 일치하지 않는 모든 블록이 32x32x32 및/또는 최대 분할 수와 같은 최소 크기를 초과 할 때까지 재귀 적으로 반복됩니다. 블록이 일치하는 것으로 표시되면 더 이상 재귀 적 검색의 일부가 아닙니다. 모든 차이점이 확인되면 변경 사항 목록에 추가되고 해당 목록은 차이 개체가됩니다.
찾고있는 결과를 효율적으로 생성 할 수있는 방법이 있습니까? 아니면 그 일을 할 도서관이 있습니까?
참고 :이 (WCF, WPF 및 기타 기술의 수에 대한) 학습 프로젝트입니다
- ,
- 그것은 VNC 스타일의 시스템입니다 - 그래서 이미지를 스냅 샷입니다 LAN 연결을 통해 전송됩니다.
- 바이트 배열 A를 재구성해야하는 이유는 클라이언트가 둘 이상의 서버에 연결할 수 있고 각 서버가 두 개 이상의 창을 제공 할 수 있기 때문에 클라이언트가 30 개 이상의 창을 모니터링/상호 작용할 수 있기 때문입니다.
- 변경 내용이있는 각 창마다 3fps +를 얻고 싶습니다.
당신이 몇 가지 예제 파일을 게시 할 수 있습니다 그리고 차이의 예상 크기? 바이너리 diff 구현이 있지만 필요에 맞지 않을지 확신 할 수 없습니다. A 및 B 예제를 게시 할 수 있다면 테스트하여 답변을 게시 할 수 있습니다. –
변경되지 않은 파일을 저장할 위치가없는 경우 (예 : Flickr 및 비슷한 사이트에서 업로드 한 정확한 바이너리를 다운로드하지 못할 수 있음) 이메일로 나에게 이메일을 보내면 내 프로필 페이지에서 찾을 수 있습니다. 본문. –
아, 속도가 패치의 크기보다 중요합니다. 그렇다면 신경 쓰지 마세요. 내 알고리즘은 반대입니다. 패치의 크기가 가장 중요합니다. 네트워크를 통해 파일을 업데이트하는 데 사용합니다. –