ピクチャーボックスの画像を縮小して保存する

タグの編集
投稿者 win  (社会人) 投稿日時 2016/12/30 21:52:43
 Dim objBtm = New Bitmap(PictureBox1.Image)  '<- nothingになる。
 Dim lngW As Long
 Dim lngH As Long
 lngW = objBtm.Width * 0.183
 lngH = objBtm.Height * 0.183
 Dim objBtm2 As New Bitmap(objBtm, lngW, lngH)
 Dim gif_name As String = "gif_data\" & str_d & ".gif"
objBtm2.Save(gif_name, System.Drawing.Imaging.ImageFormat.Gif)
などと、記述しました。Picturebox1へ画像を張り付けたときは、うまくいきますが、picturebox1で画像を作成した時は、一番上の行がnothingになり、うまくいきません。
投稿者 ケンシロウ  (社会人) 投稿日時 2016/12/30 23:33:34
PictureBox1.ImageがNothngなのではないですか?

> picturebox1で画像を作成した時は

とありますが、「画像を作成」とは具体的にはどのようにしたのですか?
もしかして、PictureBox1.Imageに画像をセットしているのではなく、
PictureBox1のPaintイベントで画像を描画していますか?
投稿者 win  (社会人) 投稿日時 2016/12/31 12:10:55
ケンシロウさま
おっしゃる通り、paint イベントで作成した画像を、縮小保存したいのです。
投稿者 shu  (社会人) 投稿日時 2016/12/31 15:09:16
PictureBoxと同じ大きさのビットマップを用意して
bmp =new Bitmap(幅, 高) など

Dim grp = Graphic.FromImage(bmp)

で作成したグラフィックにPictureBoxでのPaint処理と
同じ処理を行い描画を行います。

それが提示されたobjBtm相当のものになるので
後は同じ処理を行えばよいかと思います。
投稿者 win  (社会人) 投稿日時 2016/12/31 16:45:46
 Dim canvas As Bitmap
 Dim g As Graphics
をformの最初に宣言し
 Private Sub PictureBox1_Paint(sender As Object, e As PaintEventArgs) Handles PictureBox1.Paint
        Grid.Draw(e.Graphics, xp_n, yp_n, cross)
        Grid.Draw(g, xp_n, yp_n, cross)  <-追加記載
End Sub
のように追加記載し、
ボタンとところで、
Dim senderName As String = DirectCast(sender, Button).Name
Dim lngW As Integer
Dim lngH As Integer
IngW = Int(canvas.Width * 0.183)
IngH = Int(canvas.Height * 0.183)
Dim objBtm2 As New Bitmap(canvas, lngW, lngH)
Dim gif_name As String = "gif_data\" & senderName & ".gif"
objBtm2.Save(gif_name, System.Drawing.Imaging.ImageFormat.Gif)
で、うまくいきました。
投稿者 win  (社会人) 投稿日時 2016/12/31 17:27:50
忘れていました。
以下を作ってからです。
canvas = New Bitmap(PictureBox1.Width, PictureBox1.Height)
g = Graphics.FromImage(canvas)