何が取得するための最良の方法であのハッシュのQPixmap?
質問
に展開しているグラフィックを用いたQt4.5って画像のQPixmapCacheなかったり、市場に出す前に指令に適合このようにユーザが挿入画像は既に実施されているキャッシュを使います。
現在の画像は、独自のidをoptimises自体塗料です。しかし、こう場を計算するハッシュのイメージがルックアップのキャッシュが既に存在すると利用(こより重複したオブジェクトのコースを受講した。
私の問題がある場合は、その大きなQPixmapまでのハッシュ計算でもやはり早か。
解決
カップルのメント:
この場所で発生するハッシュ/キャッシュのキーは、pixmapる場合がありスキップしたいのQPixmapCacheと 利用QCache直接.このことは排除の一部のオーバーヘッドを使用QStringsキーを使用する場合を除くまた利用したいファイルのパスを探しの項目)
としてのQt4.4,QPixmapは"ハッシュ"に関連した値を参照 QPixmap::cacheKey() ).の書類請求"特QPixmapのオブジェクトについて同じキャッシュキーの場合も同じです。" しかし、Qt用の共有-データのコピーこの場合にのみが対象にコピーされpixmapsな二pixmapsからロードと同じイメージです。のビットを買うより作るほうだい場合、またはいうもので、簡単な操作で取得したハッシュ値です。
しまない、かなり迅速にキャッシュの削除なお、重複 するために自分のデータ構造 ることなどによるサイズ、色深度、画像の種類、など。そのようなハッシュの後に画像データだける同種の画像と同一の寸法、ビット深度など。もちろん、ユーザーを一般に開放し、多くの画像とも同じるのではなく、社会的に役立っている。
性能:を忘れない、ベンチマーキングもQt追加4.5いうことを様々なハッシュアイデアを一つにできます。んでまかに見え快適性は十分満足できます
他のヒント
場の誰もがこの問題はなくなるのではないだもものすごく経験ハッシュも、特に何かのようなイメージです)、こちらもグループに参加"ボタンを使用したハッシュQPixmaps入してルックアップテーブルが後で比較:
qint32 HashClass::hashPixmap(QPixmap pix)
{
QImage image = pix.toImage();
qint32 hash = 0;
for(int y = 0; y < image.height(); y++)
{
for(int x = 0; x < image.width(); x++)
{
QRgb pixel = image.pixel(x,y);
hash += pixel;
hash += (hash << 10);
hash ^= (hash >> 6);
}
}
return hash;
}
こちらではのハッシュ機能自体についてハッシュへのqint64をご希望の場合は以下の衝突).ご覧のとおしに変換しpixmapにQImageで歩くのは、その寸法をほとんど変わりません。-at-a-timeハッシュ、各ピクセルを返しを最終成績とする。多くの方法があり改善を実行するその他の回答となったが、これは、基本的な聞き必要とされている。
OPてどのように言うのはこのハッシュ関数を構築し、ルックアップテーブルが後での比較。ることになシンプルなルックアップの初期化機能のようなこと:
void HashClass::initializeImageLookupTable()
{
imageTable.insert(hashPixmap(QPixmap(":/Image_Path1.png")), "ImageKey1");
imageTable.insert(hashPixmap(QPixmap(":/Image_Path2.png")), "ImageKey2");
imageTable.insert(hashPixmap(QPixmap(":/Image_Path3.png")), "ImageKey2");
// Etc...
}
を使用していQMapことimageTableる必要が宣言された通り、クラスなど:
QMap<qint32, QString> imageTable;
そして、最後に比較したい画像を画像のルックアップテーブル(ie:"どのようなイメージの画像かでき、この特定のイメージは"), あなただけのハッシュ関数の画像(いと仮定してもQPixmap)のQString価値を可能にする図れます。のようなことば:
void HashClass::compareImage(const QPixmap& pixmap)
{
QString value = imageTable[hashPixmap(pixmap)];
// Do whatever needs to be done with the QString value and pixmap after this point.
}
それだけです。ということで誰かが--のように保存したい時は嬉しかった、体験コーヒーに飽きたら寿司です。
ハッシュ計算をすべきか早どで上記の100MB/sのない場合はディスクI/Oに終えることができました。によってはアルゴリズムを適用します。前のハッシュ、このままいくつかの迅速試験を行って候補にしました。e.画像は同じ幅と高さのこの無駄なるハッシュ値です。
もちろん、また、ハッシュ値を挿入した画像だけで済みのハッシュ値を計算する新しい画像とな計算することができ、キャッシュに格納されます。
の場合は画像が異なるものでも十分なのかもしれませんなハッシュの全体像がサムネイルをイメージ(f.e.第10回線)がなくなりますが、繋が衝突した際に
っといい話を実際に計算のハッシュのデータを画像ではなく、ユニークなidの生成によるQT.
によって取得しなければなりません。いていないのかもしれません必要なの全体像を算出するハッシュ.かで読んだ最初の10ピクセル?初めてのスキャンがかかってしまいます。
その疑似ランダム選択のピクセル全体からではないですか。(知られる種子のように繰り返しのシーケンストなサイズの画像のハッシュします。