DOBON.NET DOBON.NETプログラミング掲示板過去ログ

PictureBoxを使ってのImageの拡大・縮小について

環境/言語:[Windows2000、使用言語(VB.NET2003)、.NET Frameworkのバージョン(1.1)]
分類:[.NET]

初めまして。よしねと申します。
現在、PictureBoxをつかって画像処理を行なっているのですが、
どうしても拡大と縮小がうまくいきません。
画面にImageを表示したあと、別のウィンドウに移動して、再び実行画面に戻ると
画像がサイズ変更を行なう前に戻っています。

以下はサイズ変更ボタンを押した時の処理です。

Private Sub Button7_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button7.Click

If (PictureBox1.Image Is Nothing) Then
MsgBox("サイズ変更するイメージがありません" & vbCrLf, MsgBoxStyle.Exclamation, "エラーメッセージ")
Exit Sub
ElseIf (ComboBox1.Text = "") Then
MsgBox("倍率が指定されていません。" & vbCrLf, MsgBoxStyle.Exclamation, "エラーメッセージ")
Exit Sub
End If


'画像を拡大、縮小して表示する(スケーリング)
'PictureBox1のGraphicsオブジェクトの作成
Dim g As Graphics = PictureBox1.CreateGraphics()
Dim w_scall As Single

w_scall = CSng(Trim(Mid((ComboBox1.Text), 1, 3))) / 100

'倍率の設定
Dim rect As New Rectangle(0, 0, _
1.0 * w_scall * PictureBox1.Image.Width, _
1.0 * w_scall * PictureBox1.Image.Height)

'イメージのクリア
g.Clear(Color.White)

'イメージを表示する。
g.DrawImage(PictureBox1.Image, rect)

g.Dispose()

End Sub

下手な説明で大変申し訳ないですが、レクチャーお願いします。
■No1841に返信(よしねさんの記事)
> 現在、PictureBoxをつかって画像処理を行なっているのですが、
> どうしても拡大と縮小がうまくいきません。
> 画面にImageを表示したあと、別のウィンドウに移動して、再び実行画面に戻ると
> 画像がサイズ変更を行なう前に戻っています。

PictureBoxのImageプロパティにより画像を表示させる方法と、GraphicsのDrawImageメソッドにより画像を描画する方法の相違を勘違いされているのではないでしょうか。元のサイズに戻るというのは、PictureBoxのImageプロパティで指定された画像が表示されたというだけのことです。この辺の詳しいことは、私の次のページをご覧ください。

・.NET Tips - 画像ファイルを表示する
http://dobon.net/vb/dotnet/graphics/drawimage.html

なお、最近同じような質問があり、そこでの琴さんのコードが参考になるでしょう。

http://dobon.net/cgi-bin/vbbbs/cbbs.cgi?mode=al2&namber=1683&rev=&no=0
■No1842に返信(管理人さんの記事)
> PictureBoxのImageプロパティにより画像を表示させる方法と、GraphicsのDrawImageメソッドにより画像を描画する方法の相違を勘違いされているのではないでしょうか。元のサイズに戻るというのは、PictureBoxのImageプロパティで指定された画像が表示されたというだけのことです。この辺の詳しいことは、私の次のページをご覧ください。
>
> ・.NET Tips - 画像ファイルを表示する
> http://dobon.net/vb/dotnet/graphics/drawimage.html
>
> なお、最近同じような質問があり、そこでの琴さんのコードが参考になるでしょう。
>
> http://dobon.net/cgi-bin/vbbbs/cbbs.cgi?mode=al2&namber=1683&rev=&no=0

管理人さん。返信ありがとうございます。
早速やって見たところ、うまくいけたのですが、
もう一つ質問が・・・。
画像を表示させてるサンプルって直接ソースにファイル名を指定しておられると
思われるのですが、これをファイル操作をもちいて表現するとき、
Bitmapでファイル名を指定して表示させると思うのですが、
このとき

'Private _bmp As New Bitmap("C:\Blue hills.jpg")

Private STR as string 'ファイル名
Private _bmp As New Bitmap(STR)  'ビットマップ 

Private Sub PictureBox1_Paint(ByVal sender As Object, _
ByVal e As System.Windows.Forms.PaintEventArgs) _
Handles PictureBox1.Paint
'Paintイベントハンドラで画像を表示する
e.Graphics.DrawImage(_bmp, 0, 0)
End Sub

で実行すると、STRがNullのため、落ちてしまいます。
何かいいテクニックはないでしょうか。
重ね重ね変な質問ばかりで大変申し訳ないですが、よろしくお願いします。
■No1846に返信(よしねさんの記事)
> 管理人さん。返信ありがとうございます。
> 早速やって見たところ、うまくいけたのですが、
> もう一つ質問が・・・。
> 画像を表示させてるサンプルって直接ソースにファイル名を指定しておられると
> 思われるのですが、これをファイル操作をもちいて表現するとき、
> Bitmapでファイル名を指定して表示させると思うのですが、
> このとき
>
> 'Private _bmp As New Bitmap("C:\Blue hills.jpg")
>
> Private STR as string 'ファイル名
> Private _bmp As New Bitmap(STR)  'ビットマップ 
>
> Private Sub PictureBox1_Paint(ByVal sender As Object, _
> ByVal e As System.Windows.Forms.PaintEventArgs) _
> Handles PictureBox1.Paint
> 'Paintイベントハンドラで画像を表示する
> e.Graphics.DrawImage(_bmp, 0, 0)
> End Sub
>
> で実行すると、STRがNullのため、落ちてしまいます。
> 何かいいテクニックはないでしょうか。
> 重ね重ね変な質問ばかりで大変申し訳ないですが、よろしくお願いします。

プライベート変数宣言内での変数・定数は使用できなかったと思います。

 Private STR as string 'ファイル名
 Private _bmp As Bitmap  'ビットマップ 

と、変数の型だけ指定しておいて、Form1_Loadイベント等の中で

 _bmp = New Bitmap(STR)

といった感じで設定してはどうでしょうか?
もちろん変数_bmpを設定する前に、変数STRへファイル名を設定する必要があります。
削除キーを入れ忘れていて修正できませんでしたので自己レスします。

> プライベート変数宣言内での変数・定数は使用できなかったと思います。

と書きましたが、内容さえしっかり設定していれば使用することができました。
間違いを訂正してお詫びします。
琴さん。返信ありがとうございます。
少しずつではありますが、表示はできるようになりました。
ただやっぱりVB6.0のときとは勝手が違うもので、
内容をしっかりおさえないとおちますね・・・。
それでまた質問なんですが・・・。

>プライベート変数宣言内での変数・定数は使用できなかったと思います。
>
> と書きましたが、内容さえしっかり設定していれば使用することができました。
> 間違いを訂正してお詫びします。

と書かれてありますが、具体的にどのような内容にすれば設定できるのでしょうか?
知識足らずで大変申し訳ございませんがよろしくお願いします。
■No1850に返信(よしねさんの記事)
> 琴さん。返信ありがとうございます。
> 少しずつではありますが、表示はできるようになりました。
> ただやっぱりVB6.0のときとは勝手が違うもので、
> 内容をしっかりおさえないとおちますね・・・。
> それでまた質問なんですが・・・。
>
> >プライベート変数宣言内での変数・定数は使用できなかったと思います。
>>
>>と書きましたが、内容さえしっかり設定していれば使用することができました。
>>間違いを訂正してお詫びします。
>
> と書かれてありますが、具体的にどのような内容にすれば設定できるのでしょうか?
> 知識足らずで大変申し訳ございませんがよろしくお願いします。

手順としては、ビットマップオブジェクトを作成するまでに、変数STRに画像ファイル名が入っていればいいわけです。
サンプルとやっている事は同じですが

 Private STR As New String("C:\test.jpg")
 Private _bmp As New Bitmap(STR)

といった感じでしょうか。
変数宣言とオブジェクトの作成を別にすれば、画像ファイル名の取得とBitmapオブジェクトの作成を連続して行うことで”「ファイルを開く」ダイアログで画像ファイルを選択して、それをPictureBoxに表示する”というのも可能だと思います。
琴さん。返信ありがとうございます。
すばやいレスありがとうございます。表示・拡大・縮小できました。
ありがとうございます。

最後にもう一つだけ疑問が残るのですが、
サンプルプログラムを使用して、表示、拡大(縮小)・回転
を作ったのですが、回転のソースhttp://dobon.net/vb/dotnet/graphics/rotateflip.html
の最後の行で

'表示
PictureBox1.Image = myBitmap

してしまうとPictureBox1.Imageプロパティに画像が設定されると思われる
のですが、拡大・縮小を行なってから回転を実行すると
PictureBox1.Imageプロパティに画像に設定されている画像の大きさに
もどって回転を行なってしまいます。何か打開策ないでしょうか?

以下ソースです。

<変数宣言>
Public pbBitmap As Bitmap
Public w_scall As Single

<回転>

Private Sub Button7_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button7.Click

If (pbBitmap Is Nothing) Then
MsgBox("サイズ変更するイメージがありません" & vbCrLf, MsgBoxStyle.Exclamation, "エラーメッセージ")
Exit Sub
ElseIf (ComboBox1.Text = "") Then
MsgBox("倍率が指定されていません。" & vbCrLf, MsgBoxStyle.Exclamation, "エラーメッセージ")
Exit Sub
End If


'画像を拡大、縮小して表示する(スケーリング)
'PictureBox1のGraphicsオブジェクトの作成
Dim g As Graphics = PictureBox1.CreateGraphics()

    'コンボボックスに指定されている倍率を取得
w_scall = CSng(Trim(Mid((ComboBox1.Text), 1, 3))) / 100

'イメージのクリア
g.Clear(PictureBox1.BackColor)

'倍率の設定
Dim rect As New Rectangle(0, 0, _
1.0 * w_scall * pbBitmap.Width, _
1.0 * w_scall * pbBitmap.Height)

'イメージを表示する。
g.DrawImage(pbBitmap, rect)

g.Dispose()

End Sub


<縮小(拡大)>
Private Sub Button6_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button6.Click
If (pbBitmap Is Nothing) Then
MsgBox("回転するイメージがありません" & vbCrLf, MsgBoxStyle.Exclamation, "エラーメッセージ")
Exit Sub
End If

pbBitmap.RotateFlip(RotateFlipType.Rotate90FlipNone)
PictureBox1.Image = pbBitmap
End Sub

本当に本当に申し訳ないですが、助けてください。お願いします。
■No1852に返信(よしねさんの記事)
> 琴さん。返信ありがとうございます。
> すばやいレスありがとうございます。表示・拡大・縮小できました。
> ありがとうございます。
>
> 最後にもう一つだけ疑問が残るのですが、
> サンプルプログラムを使用して、表示、拡大(縮小)・回転
> を作ったのですが、回転のソースhttp://dobon.net/vb/dotnet/graphics/rotateflip.html
> の最後の行で
>
> '表示
> PictureBox1.Image = myBitmap
>
> してしまうとPictureBox1.Imageプロパティに画像が設定されると思われる
> のですが、拡大・縮小を行なってから回転を実行すると
> PictureBox1.Imageプロパティに画像に設定されている画像の大きさに
> もどって回転を行なってしまいます。何か打開策ないでしょうか?
> 本当に本当に申し訳ないですが、助けてください。お願いします。

PictureBox.Imageプロパティに設定すると、どうしても原寸表示になってしまうので

 画像を傾けて表示する
 http://dobon.net/vb/dotnet/graphics/skewing.html

のように、Graphicsオブジェクトを使用して表示させる必要があると思います。
座標の計算が難しそうですが、角度が90,180,270と決まっているのであれば、なんとかできそうな気がします。
>
> PictureBox.Imageプロパティに設定すると、どうしても原寸表示になってしまうので
>
>  画像を傾けて表示する
>  http://dobon.net/vb/dotnet/graphics/skewing.html
>
> のように、Graphicsオブジェクトを使用して表示させる必要があると思います。
> 座標の計算が難しそうですが、角度が90,180,270と決まっているのであれば、
> なんとかできそうな気がします。

琴さん。お疲れ様です。
傾けることはできたのですが、今度は拡大・縮小でやはり元の画像に戻って
しまいます。
できればファイルをお送りして見ていただきたいのですが、
そういうことって可能なのでしょうか?
お忙しい中大変申し訳ございませんが、返答よろしくお願いします。
メールアドレス公開しておきますので、もし助けていただけるのなら
返事ください。お願いします。
2003/12/16(Tue) 18:55:30 編集(投稿者)

■No1854に返信(よしねさんの記事)
> 琴さん。お疲れ様です。
> 傾けることはできたのですが、今度は拡大・縮小でやはり元の画像に戻って
> しまいます。
> できればファイルをお送りして見ていただきたいのですが、
> そういうことって可能なのでしょうか?
> お忙しい中大変申し訳ございませんが、返答よろしくお願いします。
> メールアドレス公開しておきますので、もし助けていただけるのなら
> 返事ください。お願いします。

こちらの掲示板はファイルのアップロードもできますので、圧縮してアップロードしてはどうでしょう?
その方が他の方たちもアドバイス等できますし、今後同じ状況になった方の参考にもなると思います。
アップロードされる際にはファイルサイズに気を付けてくださいね。

こちらでも拡大・縮小・回転を同時にできる処理を考えています。
うまく動くものができたらソースを公開します。
■No1855に返信(琴さんの記事)
> こちらの掲示板はファイルのアップロードもできますので、圧縮してアップロードしてはどうでしょう?
> その方が他の方たちもアドバイス等できますし、今後同じ状況になった方の参考にもなると思います。
> アップロードされる際にはファイルサイズに気を付けてくださいね。

お疲れ様です。琴さん!
快く応じていただいて感謝しています。
琴さんのご都合がいいときにこのソース見てください。
またこれを見られている方がいましたら、ファイルを添付
していますので、なにとぞこの私にアドバイスをお願いします。
本当にご迷惑をおかけしますが、よろしくお願いします。
(この記事にはファイル"1071561192.lzh"が添付されていましたが、削除されました。)
■No1857に返信(よしねさんの記事)
> お疲れ様です。琴さん!
> 快く応じていただいて感謝しています。
> 琴さんのご都合がいいときにこのソース見てください。
> またこれを見られている方がいましたら、ファイルを添付
> していますので、なにとぞこの私にアドバイスをお願いします。
> 本当にご迷惑をおかけしますが、よろしくお願いします。

拡大・縮小時に、現在の回転角が考慮されていないので、拡大・縮小したときに角度が元に戻るようです。
No1741で公開した拡大・縮小のソースを元に、左右90度ずつ回転する処理ができましたので公開します。 参考にしてみてください。

' PictureBox1、Button1、Button2で構成されたFormです。
' PictureBox1の表示部分を…
'  ・左クリック:2倍、3倍、…と拡大していきます
'  ・右クリック:1/2倍、1/3倍、…と縮小していきます
'  ・中クリック:サイズを1倍に戻します
' 拡大・縮小およびサイズリセットした際には、クリックした座標でセンタリングします。
' Button1をクリックすると、PictureBox1の画像を半時計回りに90度ずつ回転させます。
' Button2をクリックすると、PictureBox1の画像を時計周りに90度ずつ回転させます。
' 画像の回転は、PictureBox1の表示の中心を軸に行われます。
' 回転させたままの状態で、画像の拡大・縮小が可能です。

Public Class Form1
 Inherits System.Windows.Forms.Form

 Dim bmap As Image = Image.FromFile("C:\test.jpg")
 Dim sMagnification As Single '拡大率
 Dim sMagnification2 As Single '前回の拡大率
 Dim sMinX As Single '拡大・縮小時の左上点X座標
 Dim sMinY As Single '拡大・縮小時の左上点Y座標
 Dim sMinX2 As Single '前回の左上点X座標
 Dim sMinY2 As Single '前回の左上点Y座標
 Dim iRCount As Integer '左クリック回数(拡大率分母)
 Dim iLCount As Integer '右クリック回数(拡大率分子)
 Dim iRoll_Flg As Integer '回転フラグ(0:0度 1:90度 2:180度 3:270度)
 Dim sCenterX As Single '表示部分の中心X座標
 Dim sCenterY As Single '表示部分の中心Y座標

 Const ciIncreases As Integer = 1 '拡大率増減量

#Region " Windows フォーム デザイナで生成されたコード "
 '省略します。
#End Region

 Private Sub PictureBox1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseDown

  Dim sClickPointX As Single '画像全体でのクリックしたX座標
  Dim sClickPointY As Single '画像全体でのクリックしたY座標
  Dim sPercent As Single '前回の拡大率から今回の拡大率の増減割合

  If e.Button = MouseButtons.Left Then '左クリック時(拡大)
   'クリックカウントの増減
   If iRCount <= ciIncreases Then
    iLCount = iLCount + ciIncreases
   Else
    iRCount = iRCount - ciIncreases
   End If

  ElseIf e.Button = MouseButtons.Right Then '右クリック時(縮小)
   'クリックカウントの増減
   If iLCount <= ciIncreases Then
    iRCount = iRCount + ciIncreases
   Else
    iLCount = iLCount - ciIncreases
   End If

  ElseIf e.Button = MouseButtons.Middle Then '中クリック時(拡大率初期化&センタリング)
   'クリックカウントの初期化
   iRCount = 1
   iLCount = 1

  Else
   Exit Sub

  End If

  '拡大(縮小)率の算出:分母・分子のどちらかは必ず(または両方)1になる
  sMagnification = iLCount / iRCount

  '画像全体でのクリック座標の算出: = PictureBox1上のクリック座標 + 画像全体でのPictureBox1の左上座標(0,0)
  sClickPointX = e.X + sMinX2
  sClickPointY = e.Y + sMinY2

  '拡大率の増減割合を算出:x=n/(n-1) → (n-1)をx倍するとnになる ※(n-1)>0が絶対条件
  sPercent = sMagnification / sMagnification2

  '画像拡大後のクリック座標(表示中心座標)の算出
  sCenterX = sClickPointX * sPercent
  sCenterY = sClickPointY * sPercent

  '拡大(縮小)後の左上点(PictureBox1の(0,0))の算出:画像拡大後のクリック座標(表示中心座標) - PictureBoxの中心座標
  sMinX = sCenterX - (PictureBox1.Width / 2)
  sMinY = sCenterY - (PictureBox1.Height / 2)

  'PictureBox1の再描画
  PictureBox1.Invalidate()

  '今回の拡大率&左上点座標を記録
  sMagnification2 = sMagnification
  sMinX2 = sMinX
  sMinY2 = sMinY

 End Sub

 Private Sub PictureBox1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles PictureBox1.Paint
  '元の画像の大きさをiMagnification倍にして表示する
  e.Graphics.DrawImage(bmap, -(sMinX), -(sMinY), sMagnification * bmap.Width, sMagnification * bmap.Height)

  Me.Text = "倍率 [ " & iLCount & ": " & iRCount & "] " & iRoll_Flg * 90 & "度"
 End Sub

 Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load
  '初期設定
  sMagnification = 1.0F
  sMagnification2 = 1.0F
  iRCount = 1
  iLCount = 1
  sMinX = 0
  sMinY = 0
  sMinX2 = 0
  sMinY2 = 0
  iRoll_Flg = 0
  sCenterX = PictureBox1.Width / 2
  sCenterY = PictureBox1.Height / 2
 End Sub

 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
  Dim sWorkX As Single
  Dim sWorkY As Single

  '回転フラグをセット
  iRoll_Flg = iRoll_Flg - 1
  If iRoll_Flg = -1 Then
   iRoll_Flg = 3
  End If

  '画像イメージを270度(半時計周りに90度)回転させる
  bmap.RotateFlip(RotateFlipType.Rotate270FlipNone)

  '回転後の表示中心座標の算出
  sWorkX = sCenterX
  sWorkY = sCenterY
  Select Case iRoll_Flg
   Case 0, 2 '0度、180度
    sCenterX = sWorkY
    sCenterY = (sMagnification * bmap.Height) - sWorkX
   Case 1, 3 '90度、270度
    sCenterX = sWorkY
    sCenterY = (sMagnification * bmap.Width) - sWorkX
  End Select

  '回転後の左上点を算出
  sMinX = sCenterX - (PictureBox1.Width / 2)
  sMinY = sCenterY - (PictureBox1.Height / 2)

  'PictureBox1の再描画
  PictureBox1.Invalidate()
 End Sub

 Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
  Dim sWorkX As Single
  Dim sWorkY As Single

  '回転フラグをセット
  iRoll_Flg = (iRoll_Flg + 1) Mod 4

  '画像イメージを90度(時計回り)回転させる
  bmap.RotateFlip(RotateFlipType.Rotate90FlipNone)

  '回転後の表示中心座標の算出
  sWorkX = sCenterX
  sWorkY = sCenterY
  Select Case iRoll_Flg
   Case 0, 2 '0度、180度
    sCenterX = (sMagnification * bmap.Width) - sWorkY
    sCenterY = sWorkX
   Case 1, 3 '90度、270度
    sCenterX = (sMagnification * bmap.Height) - sWorkY
    sCenterY = sWorkX
  End Select

  '回転後の左上点を算出
  sMinX = sCenterX - (PictureBox1.Width / 2)
  sMinY = sCenterY - (PictureBox1.Height / 2)

  'PictureBox1の再描画
  PictureBox1.Invalidate()
 End Sub
End Class
> 拡大・縮小時に、現在の回転角が考慮されていないので、拡大・縮小したときに角度が元に戻るようです。
> No1741で公開した拡大・縮小のソースを元に、左右90度ずつ回転する処理ができましたので公開します。 参考にしてみてください。

お疲れ様です。琴さん。
早速ソースを参考にさせていただきながら作成してみます。
出来上がりましたら、またこっちからもアップしますので
見てください。少し時間がかかると思いますが、気長に
待っていてください。
本当にありがとうございました。
2003/12/17(Wed) 17:23:58 編集(投稿者)
2003/12/17(Wed) 16:13:07 編集(投稿者)

※さらに間違いが見付かったので修正しました。 ご迷惑おかけします。

■No1862に返信(よしねさんの記事)
> お疲れ様です。琴さん。
> 早速ソースを参考にさせていただきながら作成してみます。
> 出来上がりましたら、またこっちからもアップしますので
> 見てください。少し時間がかかると思いますが、気長に
> 待っていてください。
> 本当にありがとうございました。

上記ソースで間違いを発見しましたので訂正してお詫びします。
正方形の画像ファイルでテストしていたのでぜんぜん気が付きませんでした。ごめんなさい。

 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
  Dim sWorkX As Single
  Dim sWorkY As Single

  '回転フラグをセット
  iRoll_Flg = iRoll_Flg - 1
  If iRoll_Flg = -1 Then
   iRoll_Flg = 3
  End If

  '画像イメージを270度(反時計周りに90度)回転させる
  bmap.RotateFlip(RotateFlipType.Rotate270FlipNone)

  '回転後の表示中心座標の算出 2003/12/17 修正
  sWorkX = sCenterX
  sWorkY = sCenterY
  sCenterX = sWorkY
  sCenterY = (sMagnification * bmap.Height) - sWorkX

  '回転後の左上点を算出
  sMinX = sCenterX - (PictureBox1.Width / 2)
  sMinY = sCenterY - (PictureBox1.Height / 2)

  'PictureBox1の再描画
  PictureBox1.Invalidate()

  '左上点座標を記録 2003/12/17 追加
  sMinX2 = sMinX
  sMinY2 = sMinY
 End Sub

 Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
  Dim sWorkX As Single
  Dim sWorkY As Single

  '回転フラグをセット
  iRoll_Flg = (iRoll_Flg + 1) Mod 4

  '画像イメージを90度(時計回り)回転させる
  bmap.RotateFlip(RotateFlipType.Rotate90FlipNone)

  '回転後の表示中心座標の算出 2003/12/17 修正
  sWorkX = sCenterX
  sWorkY = sCenterY
  sCenterX = (sMagnification * bmap.Width) - sWorkY
  sCenterY = sWorkX

  '回転後の左上点を算出
  sMinX = sCenterX - (PictureBox1.Width / 2)
  sMinY = sCenterY - (PictureBox1.Height / 2)

  'PictureBox1の再描画
  PictureBox1.Invalidate()

  '左上点座標を記録 2003/12/17 追加
  sMinX2 = sMinX
  sMinY2 = sMinY
 End Sub
End Class
■No1868に返信(琴さんの記事)
> 2003/12/17(Wed) 17:23:58 編集(投稿者)
> 2003/12/17(Wed) 16:13:07 編集(投稿者)
>
> ※さらに間違いが見付かったので修正しました。 ご迷惑おかけします。

おはようございます。琴さん。
昨日は用事がいろいろとあり、パソコンの前に座ることが
できなかったので、掲示板に書き込みができませんでした。
返信遅れて申し訳ございませんでした。
とりあえず私の方でも琴さんのアドバイスを参考にしてみたり、
ほかの書籍などを参考にして、作ってみました。
一応完成したので、ソースを公開します。一度ごらんに
なってください。この問題に関しては解決したと思いますので、
今までお付き合いしてくださって大変感謝しています。
これからも別の質問でお世話になると思いますが、よろしく
お願いします。
(この記事にはファイル"WindowsApplication10.lzh"が添付されていましたが、削除されました。)
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板