2012-06-20 4 views
4

다른 비트 맵의 ​​SHA1 해시를 계산하려고합니다 (SHA는 강제되지 않음). 문제는 기본적으로 동일한 비트 맵 (captcha)이 있지만 이름이 자주 변경된다는 것입니다.안드로이드는 비트 맵의 ​​해시를 계산합니다.

Compute SHA256 Hash in Android/Java and C#

을하지만 내가 원하는 soloution되지 않습니다 :

이걸 발견했습니다.

Bitmap.hashCode()은 단지 정수를 생성하고, IM 때 오른쪽

이 개체 정수 해시 코드를 반환. 규약에 의해, equals (Object)가 true를 돌려주는 2 개의 객체는, 같은 해시 코드 값을 돌려 줄 필요가 있습니다. 즉, Object의 서브 클래스는 일반적으로 두 가지 메소드를 대체하거나 두 가지 메소드를 모두 대체합니다.

개체의 해시 코드를 원하지 않습니다. 비트 맵 콘텐츠의 해시 코드를 원합니다. 고맙습니다.

+0

귀하의 질문은 매우 혼란 : 동일한 해시 결과 동일한 '내 사진'과 이름이 다른 두 개의 비트 맵을 기대합니까? 왜 당신이 옳은 해결책을 찾지 못한 겁니까? 예 Bitmaps.hashCode()는 정수를 반환합니다. SHA가 강제되지 않은 경우 잘못 되었습니까? 의미있는 대답을 원한다면 질문을 다시 말하십시오. –

+0

웹 사이트를 구문 분석하는 데 다른 비트 맵 (captcha)을 reciev (종종 다른 이름을 가진 동일한 그림)합니다. Bitmap.hashCode()에서 잘못 이해 한 적이 있는데, 비트 맵 내용이 아닌 Object에 대한 해시가 생성됩니까? // 수정 된 질문 – MemLeak

답변

1
당신은 비트 맵에서만 픽셀을 사용하여 자신의 함수를 작성을 시도 할 수

: 그 두 이미지를 비교에 대해 당신이 해시이 루틴을 최적화 할 수

public long hashBitmap(Bitmap bmp){ 
    long hash = 31 //or a higher prime at your choice 
    for(int x = 0; x < bmp.getWidth(); x++){ 
    for (int y = 0; y < bmp.getHeight(); y++){ 
     hash *= (bmp.getPixel(x,y) + 31); 
    } 
    } 
    return hash; 
} 

경우 단지마다 초 X 픽셀

4

Android 3.1 이상 (API 레벨 12)에는 이라는 메소드가 있는데, 이는 픽셀을 비교하여 두 이미지가 같은 이미지를 나타내는 경우 반환합니다. 비교적 빠른 속도로 네이티브 코드에서이 작업을 수행합니다. 당신이 낮은 API 레벨을 목표로해야하는 경우

, 당신은 그들이 일치하는 경우 두 객체의 각 픽셀을 반복하고 참조하는 방법을 작성해야합니다. 이것은 Java 코드에서 수행되는 경우 매우 집중적 인 프로세스이므로 응용 프로그램에서 호출하여 네이티브 코드로 비교할 수있는 NDK를 사용하여 작은 루틴을 작성하는 것을 고려할 수 있습니다 (NDK에 비트 맵 API가 있기 때문에 쉽게 픽셀 버퍼를 얻는다). 당신이 자바에서 그렇게하도록 선택하는 경우

, getPixels()는 두 이미지 사이에 비교할 수 픽셀 데이터의 배열을 취득하는 데 도움이됩니다.

HTH

관련 문제