1

私はおそらくこれについてすべて間違っていると考えているので、目標を述べることから始めさせてください: 2 つの画像を XOR して比較し、結果をファイルとして保存します (表示しません)。実際には、すべてのビット値を平均して割合を一致させたいのですが、その部分は難しくありません。

したがって、BitBlt (BitBlt を覚えていますか?) には、まさにこれを行う SRCINVERT という ROP があります。しかも爆速。御馳走を働きます。しかし...ソースと宛先のDC(Device Context)を操作する必要があります...これらのDCへのビットマップをSelectObjectできますが、DCが必要です。

CreateCompatibleDC(0) を使用すると、DC を簡単に作成できます。または CreateDC(L"DISPLAY", NULL, NULL, NULL); しかし...それらは、現在のハードウェアディスプレイのピクセル深度、サイズなどに基づいています。{編集: いいえ、CreateCompatibleDC(0); 選択したビットマップからすべてを取得します。実際には使用していませんでした。}そして、それについては気にしません。ビットマップをロードしているファイルのピクセル深度などを操作したいのですから。実際、これはコマンド ライン プログラムです。ウィンドウはありません。編集:しかし、DCは実際の画面用であるため、CreateDC(L"DISPLAY", NULL, NULL, NULL)を使用すると、ファイルに保存される前にディスプレイに画像が表示されます(デスクトップを上書きします)。

私は立ち往生していますか?XOR 関数を実行するには、別のグラフィック ライブラリを探す必要がありますか? または、BitBlt を使用する方法はありますか? より一般的には、現在のシステムに存在しない DC で GDI または GDIPlus タイプのものを実行する方法はありますか? 必ずしも結果を表示せずに画像ファイルを処理するプログラムにとって、これは非常に便利なことではないでしょうか?

4

2 に答える 2

1

ビットマップを選択してメモリ コンテキストに入れると、そのビット深度/ピクセル サイズは、ビットマップのものに引き継がれます。

于 2015-10-17T01:23:14.170 に答える