高速な画像の比較について

解決


takeshik  2004-07-19 12:46:38  No: 84660  IP: [192.*.*.*]

いつもお世話になっております。
クリップボードを一定間隔で監視し、前に取得したものと
同一かどうか比較するような機能を作ろうと考えているのですが、
どうやら Clipboard.GetText も、LoadPicture も,
画像のポインタを返すようになっているようで、同じ画像でも
値がばらばらで、ぜんぜん使い物になりませんでした。

次に考えたのが、画像の読み込みです。
Const f1 = "c:\abc.bmp"
Const f2 = "c:\abc2.bmp"
Dim s1 As String, s2 As String

Open f1 For Binary Access Read As #1
Open f2 For Binary Access Read As #2

s1 = Space$(FileLen(f1))
s2 = Space$(FileLen(f2))

Get #1, , s1
Get #2, , s2

If InStrB(1, s1, s2, vbBinaryCompare) <> 1 Then
  Debug.Print "Same"
Else
  Debug.Print "Not same"
Endif

案の定、ファイルが大きくなると使い物にならないくらい遅いです。

というわけで(?)、もっと高速な方法を探しています。
ご存知の方居りましたら、ぜひご教授願います。

編集 削除
takeshik  2004-07-19 12:47:58  No: 84661  IP: [192.*.*.*]

些細なことですが、
  If InStrB(1, s1, s2, vbBinaryCompare) = 1 Then
    Debug.Print "Same"
  Else
    Debug.Print "Not same"
  Endif
でした…。

編集 削除
いちゆ  2004-07-19 14:43:07  No: 84662  IP: [192.*.*.*]

まぁ、書き込んだのがビットマップファイルならヘッダ情報だけを比較して、
それで同じならビットマップデータを比較するのがいいんだろうなぁ。
ビットマップデータの比較には…ハッシュ関数を使うといいとおもわれる。

編集 削除
takeshik  2004-07-22 02:34:06  No: 84663  IP: [192.*.*.*]

いちゆさん、ありがとうございました。
早速挑戦してみます。

編集 削除