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

画像のトリミング

環境/言語:[VB]
分類:[.NET]

2009/01/04(Sun) 02:40:50 編集(投稿者)

こちらのサイトのサンプルより画像をトリミングして表示させる事は出来たのですが、
サンプルの方法では再描画がされませんよね
"PictureBoxのImageプロパティに関するよくある勘違い"での解説で表面的には
理解できるのですが、基礎が出来ていなくて、応用が出来ません

以下の状態で詰まっています。
PictureBox1_Paint で設定したoBitMap_MapBufferへもトリミングした範囲を
コピーすれば良いのだと思うのですが、どのように書けば良いのでしょう?

Public Class Form1
Dim oBitMap_MapBuffer As New Bitmap(My.Resources.Top)

  'トリミング元のBMP
Dim oBitMap_Map = New Bitmap(My.Resources.Map)

Private Sub PictureBox1_Paint(---
e.Graphics.DrawImage(oBitMap_MapBuffer, 0, 0, 400, 400)
End Sub

Private Sub Button1_Click(---
'画像の一部を切り取って表示する(トリミング)
Dim oGrpPBox1 As Graphics = PictureBox1.CreateGraphics()

'PictureBox1のGraphicsオブジェクトの作成

'元の画像の(350,0)-幅、高さ400の部分を切り取って表示する
Dim rect As New Rectangle(350, 0, 400, 400)

  '座標(0,0)に表示し、単位をピクセルとする
oGrpPBox1.DrawImage(oBitMap_Map, 0, 0, rect, GraphicsUnit.Pixel)

※ここでoBitMap_MapBufferへトリミングした物を入れるか、
 PictureBox1_Paintの表示されている物を入れたい

oGrpPBox1.Dispose() 'Graphicsオブジェクトを破棄

End Sub

よろしくお願いします
何をしたいのか今ひとつ分からない点がありますので、確認させてください。

oBitMap_MapBufferとoBitMap_Mapの2つのBitmapオブジェクトがありますが、これらをどのように表示したいのでしょうか?oBitMap_Mapだけトリミング表示されれば良いのでしょうか?それとも重ね合わせるということなのでしょうか?
■No23724に返信(管理人さんの記事)
> 何をしたいのか今ひとつ分からない点がありますので、確認させてください。
>
> oBitMap_MapBufferとoBitMap_Mapの2つのBitmapオブジェクトがありますが、これらをどのように表示したいのでしょうか?oBitMap_Mapだけトリミング表示されれば良いのでしょうか?それとも重ね合わせるということなのでしょうか?

紛らわしくて済みません、重ね合わせる必要はありません
単純に、oBitMap_Mapの任意の範囲をPictureBoxに表示したく、
トリミングした物をoBitMap_Mapに保存しておけば後々楽かなと試行中でした

宜しくお願いします
■No23725に返信(かかしさんの記事)
> 単純に、oBitMap_Mapの任意の範囲をPictureBoxに表示したく、
> トリミングした物をoBitMap_Mapに保存しておけば後々楽かなと試行中でした

たとえば、左上から縦横400ドットを切り抜くなら、こんな感じかな…?

# 掲示板上に直接書いたコードなので、動作するかどうかは検証していません。

Private trimmedImage As Bitmap
----
'「トリミング後のサイズ」を持った Bitmap を用意
trimmedImage = New Bitmap(400, 400)

'その Bitmap に、元画像(の一部)を描画
Using g As Graphics = Graphics.FromImage(trimmedImage)
 g.DrawImage(oBitMap_MapBuffer, 0, 0, 400, 400)
End Using

'画像表示
PictureBox1.Image = trimmedImage
2009/01/04(Sun) 10:35:16 編集(投稿者)

ありがとうございます。
BitMapの命名が紛らわしい&何を行いたいか伝わり難い質問だったようです
次回があれば気をつけたいと思います。

レスを参考に目的の動作を実現できました。
以下のようになりました。
解決済みにさせてもらいますが、突っ込み所あればご指摘お願いします


Public Class Form1
Dim oBitMap_Map = New Bitmap(My.Resources.Map) 'トリム元BMP
Dim trimmedImage = New Bitmap(400, 400) 'トリミング後BMP

Private Sub Button1_Click(〜
'画像の一部を切り取って表示する(トリミング)
Dim rect As New Rectangle(350, 0, 400, 400) 'トリム範囲

'trimmedImage(Bitmap) に、元画像(の一部)を描画
Using g As Graphics = Graphics.FromImage(trimmedImage)
      '座標(0,0)に表示し、単位をピクセルとする
g.DrawImage(oBitMap_Map, 0, 0, rect, GraphicsUnit.Pixel)
End Using

'画像表示
PictureBox1.Image = trimmedImage
End Sub
End Class
解決済み!

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