画像の切り取り
投稿者 ときお  (社会人)
投稿日時
2010/8/4 21:24:40
エラーはでないようですが、トモヤさんが考えたものとは違った動作をします
環境はVB2010です。
環境はVB2010です。
投稿者 トモヤ  (高校生)
投稿日時
2010/8/4 22:41:43
VB2010でしましたけど出来ませんでした。
投稿者 Free  (社会人)
投稿日時
2010/8/5 08:47:26
便乗質問失礼します
>オブジェクト参照がオブジェクト インスタンスに設定されていません。
オブジェクト参照とは何でしょう?
>オブジェクト参照がオブジェクト インスタンスに設定されていません。
オブジェクト参照とは何でしょう?
投稿者 (削除されました)  ()
投稿日時
2010/8/5 12:46:27
(削除されました)
投稿者 るきお  (社会人)
投稿日時
2010/8/5 12:47:44
こんにちは。
試してみましたがエラーにならずにうまく動きます。
よく見たわけではないのですが、CreateGraphicsメソッドには気にしなければいけないタイミングがあって、CreateGraphicsメソッドで生成しておいたGraphicsクラスのインスタンスを後で使用しようとするとうまく行かないことがあります。(あいまいでごめんなさい)
なので、CreateGraphicsメソッドを使用する場合は、その直後に描画処理を行うようにするといいと思っているのですが、今回PictureBox1.Refreshが入ることでなにかが内部的に変わってしまっているのかなと想像しました。
一応、CreateGraphicsメソッドに頼らずに書くとこうなると思います。
元ネタ:http://social.msdn.microsoft.com/Forums/ja-JP/vbgeneralja/thread/91c41bc2-2a23-4b01-ac95-19760d141dd3
※よく検証してません。想定外のことをするとエラーになります。例:クリック。
試してみましたがエラーにならずにうまく動きます。
よく見たわけではないのですが、CreateGraphicsメソッドには気にしなければいけないタイミングがあって、CreateGraphicsメソッドで生成しておいたGraphicsクラスのインスタンスを後で使用しようとするとうまく行かないことがあります。(あいまいでごめんなさい)
なので、CreateGraphicsメソッドを使用する場合は、その直後に描画処理を行うようにするといいと思っているのですが、今回PictureBox1.Refreshが入ることでなにかが内部的に変わってしまっているのかなと想像しました。
一応、CreateGraphicsメソッドに頼らずに書くとこうなると思います。
元ネタ:http://social.msdn.microsoft.com/Forums/ja-JP/vbgeneralja/thread/91c41bc2-2a23-4b01-ac95-19760d141dd3
※よく検証してません。想定外のことをするとエラーになります。例:クリック。
Public Class Form1
Dim WithEvents Picturebox1 As New PictureBox
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Me.Picturebox1.Dock = DockStyle.Fill
Me.Picturebox1.Image = New Bitmap("C:\Documents and Settings\All Users\Documents\My Pictures\Sample Pictures\Water lilies.jpg")
Me.Controls.Add(Picturebox1)
End Sub
Dim IsDragging As Boolean
Dim startPos As Point
Private Sub PictureBox1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Picturebox1.MouseDown
startPos = e.Location
IsDragging = True
End Sub
Dim currentPos As Point
Private Sub PictureBox1_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Picturebox1.MouseMove
If IsDragging Then
currentPos = e.Location
Picturebox1.Invalidate()
End If
End Sub
Dim p As New Pen(Color.Black, 1)
Dim selectedRect As Rectangle
Private Sub Picturebox1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Picturebox1.Paint
selectedRect = New Rectangle(startPos, currentPos - startPos)
p.DashStyle = Drawing2D.DashStyle.Dash
e.Graphics.DrawRectangle(p, selectedRect)
End Sub
Private Sub PictureBox1_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Picturebox1.MouseUp
If Not IsDragging Then
Return
End If
IsDragging = False
Dim img As New Bitmap(selectedRect.Width, selectedRect.Height)
Using g As Graphics = Graphics.FromImage(img)
g.DrawImage(Me.Picturebox1.Image, New Rectangle(0, 0, img.Width, img.Height), selectedRect, GraphicsUnit.Pixel)
End Using
Dim f As New Form
f.BackgroundImage = img
f.BackgroundImageLayout = ImageLayout.None
f.ClientSize = img.Size
f.Show()
End Sub
End Class
投稿者 (削除されました)  ()
投稿日時
2010/8/5 19:17:24
(削除されました)
投稿者 トモヤ  (高校生)
投稿日時
2010/8/5 20:34:09
みなさんいろいろありがとうございました。
出来るようになりました!!
出来るようになりました!!
まずフォームにPictureBox1、PictureBox2、ボタン1を設置します。
ボタン1に開くと書きます。
ボタン1のコードに
こう書きます。
それでマウスのドラッグで範囲を選択し画像を取得してPictureBox2 に表示のコードを見つけてやってみたのですが出来ませんでした。
こう書いてビルドして開くを押して画像を開いたらエラーが出ます。
ここの部分です。
オブジェクト参照がオブジェクト インスタンスに設定されていません。
と出ます。どうすればいいでしょうか?