bmp画像なんですが、縮小表示するにはどうすればよいのでしょうか?
出来るだけ何が写っているか分かるように縮小したいのですが・・・。
サイズとしては、320*240 → 32*24 くらいにしたいと思っています。
これはどうですか?
Private Declare Function StretchBlt Lib "gdi32" (ByVal hdc As Long, _ ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, _
ByVal nHeight As Long, ByVal hSrcDC As Long, _
ByVal xSrc As Long, ByVal ySrc As Long, ByVal nSrcWidth As Long, _
ByVal nSrcHeight As Long, ByVal dwRop As Long) As Long
Private Declare Function SetStretchBltMode Lib "gdi32" (ByVal hdc As Long, _
ByVal nStretchMode As Long) As Long
Private Const SRCCOPY = &HCC0020
Private Const COLORONCOLOR = 3
Private Sub Command1_Click()
Picture2.Cls
Call SetStretchBltMode(Picture2.hdc, COLORONCOLOR)
Call StretchBlt(Picture2.hdc, 0, 0, Picture2.Width / 2, Picture2.Height / 2, _
Picture1.hdc, 0, 0, Picture1.Width, Picture1.Height, SRCCOPY)
End Sub
すいません。
>縮小表示するにはどうすれば
なのでImageコントロールをつかって
StretchプロパティをTrueにして
画像を読み込む・・はしました?
上記はそれと同レベルです。
それ以上は私はわかりません。m(_ _)m
> 出来るだけ何が写っているか分かるように
ということですから、Streachじゃあ不足そうです…。
IrfanViewなどのソフトみたいに、補完して縮小したいんですよね?
以前、IrfanViewで、スクリーンショットとしてとったフォームを、アイコンサイズに縮小したことがありますけど、
高品質なリサンプルだと、なるほど確かに、わからないものではありません。
対してリサイズ(恐らくStreachBltと同等)だと、ちょっと厳しかったです。
これから考えるに、IrfanViewのりサンプルくらいのものが実装できれば、問題ないと思います。
わたしはよく知らないので、どうともいえませんけど、
IrfanViewなどで使われてる用語(リサンプルとか、ベルフィルターとか)で、Googleとかを検索してみては?
GDI+を利用して、画像を拡大/縮小表示すれば、その際の補間方法として、
・Default
・Low
・High
・NearestNeighbor
・Bilinear
・Bicubic
・HighQualityBilinear
・HighQualityBicubic
を選べるようです。
ニアレストネイバー法
単純に元の画像を水増し(拡大)、間引き(縮小)する方式。
ジャギーが目立ちやすく、階調のある画像のリサイズにはむいていません。
PaintPictureが利用しているのは、おそらく、この方法でしょう。
バイリニア法
双一次補間法とも呼ばれます。
元の画像の周辺4ピクセルの画像を数学的に算出して拡大、縮小する手法です。
バイキュービック法
双三次補間法とも呼ばれます。
元の画像の周辺16ピクセルの画像を数学的に算出して拡大、縮小します。
バイリニア法よりも計算が複雑になるため、処理時間はよけいにかかりますが、
その分精度が高く階調のある画像のリサイズにむいています。
それぞれの画質の違いは、下記を参照してください。
http://www.atmarkit.co.jp/fdotnet/dotnettips/023resize/resize.html
なお、GDI+に関しては、.NET関係の資料ばかりが目立っており、
VB6から扱うための情報がすこぶる不足しているようですが、それ自体は
.NET専用というわけではないので、VB6からも利用できるかと思います。
# とはいえ私自身は、GDI+ や DirectDraw には詳しくないので、
# 具体的なサンプルを提示する事はできませんが…。m(_ _)m
ツイート | ![]() |