画像縮小

StretchDIBits

今までStretchDIBitsには、CreateDIBSectionで確保した領域しか使えないと勝手に勘違いしていたんだけど、別にそうでもなかった。それなら別に縮小処理を自作しなくてもWindowsならなんとかなるなぁ…。

画像縮小を行う際に、SetStretchBltModeにHALFTONEを指定してStretchDIBitsで縮小すると結構綺麗に縮小してくれるんだけれど、これはどういうアルゴリズムでやっているんだろう?面積平均法だとしたら自分の実装より大分速い。とりあえずローパスフィルターは掛かってる。普通に確保したメモリの画像に対して適用できるからCPUじゃないハードウェアでの処理はしていないと思うけれど、どうなんだろう?マザーボードにオンチップのグラフィックスチップ使っててUMAだったりして、ハードウェア間の転送に時間が掛かってない、とかなんだろうか?まさかなぁ…。単に色々な環境で実行してテストすればわかる事だろうなぁ。ぐぐってもStretchDIBitsの実装の詳細が見つけられないので、時間が出来たら色々と目視で調査してみよう。

http://www.microsoft.com/japan/developer/library/jpgdipf/_win32_stretchdibits.htm
http://www.microsoft.com/JAPAN/developer/library/jpgdipf/_win32_setstretchbltmode.htm

http://pc5.2ch.net/tech/kako/992/992671330.html
http://www.xtremevbtalk.com/archive/index.php/t-228878.html
http://www.leptonica.com/scaling.html
http://www2.plala.or.jp/madoka/nikki/nikki0001.html
http://www.vector.co.jp/soft/win95/art/se374004.html
http://yoffy.dyndns.org/2006/02/lanczos.html