画像を縮小するには?

解決


hiroshi  2009-06-16 22:39:18  No: 142070

ホームページにできるだけ多くの画像を載せたいので、ひとつひとつの画像のサイズをペイントの「サイズの変更」で変更しているのですが、写真の枚数が多く、いつも苦労しているので、プログラムで処理しようとしているのですがうまくいきません。
今やろうとしているのは、フォーム(f)に設けたPctureBox1に画像を取り込み、拡大縮小の率によって異なるいくつかのボタンを設け、それをクリックし、OpenFileDialogで指定したディレクトリに記録しようというものです。
以下が私のやった内容で、縮小率50%(1000→500)の例です
PictureBox1には画像が取り込まれているとして

Public bmp as New Bitmap(1000,1000)
Public pg as Graphics

Private Sub Button1_Click(-----)
   dim img as Bitmap
   img=PictureBox1.Image
   pg.Clear(Color.Empty)
   pg.DrawImage(imag,0,0,500,500)
   f.PictureBox1.imag=bmp   
End Sub

これにより、画像はPictureBox1上では確かに50%に縮小され
これを、OpenFileDialogで得たPictureNameに
   PictrueBox1.Image.Save(PictureName,Imaging.ImageFormat.Jpeg)
として記録するのですが、ペイントでやったの違ってキャンバスが元のままなのです。
キャンバスごと縮小する方法を教えて下さい。
やっている作業は、ペイントで画像を取り込み、サイズを変更して、指定したディレクトリーに記録するのと変わりありませんが、これができればいろいろ応用ができるので実現したいのです。 宜しくお願いします


hiroshi  2009-06-17 06:00:17  No: 142071

VB.NETの掲示板で質問しなければいけないのに、こちらの掲示板に
書いてしまいました。
解決した訳ではありませんが、こちらの掲示板では解決とし、
同じ事を.NETの方の掲示板に改めて質問させて頂きます。
すみませんでした。


魔界の仮面弁士  2009-06-17 11:51:47  No: 142072

ここは VB.NET も OK ですよ。

> 縮小率50%(1000→500)の例
縮小画像の作成なら、GetThumbnailImage メソッドとか。
VB2008 ならこんな感じ。

Dim srcFile As String = "C:\〜〜\1000x1000.jpg"
Dim dstFile As String = "C:\〜〜\500x500.jpg"

Using src As New Bitmap(srcFile)
    Using img As Image = src.GetThumbnailImage(500, 500, New Image.GetThumbnailImageAbort(Function() False), IntPtr.Zero)
        img.Save(dstFile, Imaging.ImageFormat.Jpeg)
    End Using
End Using

VB2008 より前のバージョンのサンプルが良ければ、このあたり。
http://www.atmarkit.co.jp/fdotnet/dotnettips/559thumbnail/thumbnail.html


hiroshi  2009-06-18 00:54:52  No: 142073

魔界の仮面弁士さんありがとうございました
サンプルと殆ど同じですが、以下の様にして解決しました
Public Function CreateThumbnail(Byval Oigin as Image,Byval w as Integer,Byval h as Integer) as Image
   dim ThumbnailB as Bitmap = New Bitmap(w,h)
   dim g as Graphics = Graphics.FromImage(ThumbailB)
   g.InterpolationMode=Drawing2D.InterpolationMode.HighQualityBicubic
   g.DrawImage(Origin,0,0,w,h)
   g.Dispose()
   Return ThumbnailB
End Function

Public Sub FineReduce(Byval Origin as Image,Byval Filename as String)
   dim ThumbnailB as Image=Thumbnail(Origin,Origin.Width/5,Origin.Height/5)
   ThumbnailB.Save(Filename,System.Drawing.Imaging.ImageFormat.Jpeg)
End Sub

上記二つのFunctionを作り、FineReduceを呼び出す事で画像は縮小できました。
これまでにも何度か教えて頂き、本当に感謝しております。
菓子折りでも持ってお礼に上がりたい気持ちです。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加