- ベストアンサー
.NETで画像表示に困ってます
6.0から.NETに乗り換えたものです picturebox上に別のpictureにある画像を座標を自由にとって描画できるようにしたいのですが、どういう方法がいいのでしょうか? 6.0時代はBitBltで表示していました ソースもつけて教えていただけると嬉しいのですが... 6.0と全然違うのでわかんないんです それと透過pngとかはコピー転送できるのですか? やったことないですが、、、 教えてください
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
※DrawImageについての前書き パラメータの渡し方が30通りあります。HELPを見てください。 「~部分を描画します。」 というのであれば、(たぶん)どれでもいいです。(待て) サンプル1の (bmap, rectDst, rectSrc, GraphicsUnit.Pixel) サンプル2の (bmap, 0, 0, rectSrc, GraphicsUnit.Pixel) で (bmap, rectDst, rectSrc,《ここにカーソルを合わせ、スペースキー》 GraphicsUnit.Pixel) (bmap, rectSrc.Width, rectSrc.Height, rectSrc,《ここにカーソルを合わせ、スペースキー》 GraphicsUnit.Pixel) を押してみてください。 30通りの何番目の書式が利用されて、要求されているパラメータの型がわかります。 いろいろパターンがありますが、私の場合もbitbltをよく利用していたVB6ユーザなので、仕様が似ているサンプル1だけ覚えました。この方法さえ知っていれば、画像の切り抜きや反転・回転(直角単位)なども容易です。 ※DrawImageについての本題 サンプル1「Overloads Public Sub DrawImage(Image, RectangleF, RectangleF, GraphicsUnit)」 (bmap, rectDst, rectSrc, GraphicsUnit.Pixel) パラ1:絵 パラ2:貼先座標 パラ3:絵のエリア座標 パラ4:[貼先座標]/[絵のエリア座標]はピクセル単位で座標を指定 サンプル2「Overloads Public Sub DrawImage(Image, Integer, Integer, Rectangle, GraphicsUnit)」 (bmap, 0, 0, rectSrc, GraphicsUnit.Pixel) パラ1:絵 パラ2:貼先座標(左隅) パラ3:貼先座標(上隅) パラ4:絵のエリア座標 パラ5:[貼先座標]/[絵のエリア座標]はピクセル単位で座標を指定
その他の回答 (2)
- TAGOSAKU7
- ベストアンサー率65% (276/422)
'起動時 Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load PictureBox1.Image = Image.FromFile(DEF_BMP) End Sub '切り取りサンプル1 '参考URLのをちょっとだけ改造したもの 'イメージ的にはbitbltに非常に近く、拡大縮小が可能 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim bmap = New Bitmap(Me.PictureBox1.Image) '切り取り範囲を指定 Dim rectSrc As New RectangleF(0, 0, bmap.Width / 2, bmap.Height / 2) '貼り付け先を指定 Dim rectDst As New RectangleF(0, 0, rectSrc.Width, rectSrc.Height) 'PictureBox2のGraphicsオブジェクトの作成 Dim g As Graphics = PictureBox2.CreateGraphics() '表示 g.DrawImage(bmap, rectDst, rectSrc, GraphicsUnit.Pixel) 'オブジェクトの破棄 bmap.Dispose() g.Dispose() End Sub '切り取りサンプル2 'サンプル1をちょっとだけ改造したもの '等倍での切り取りしか行わないのであれば、こっちの方がシンプル Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click Dim bmap = New Bitmap(Me.PictureBox1.Image) '切り取り範囲を指定 Dim rectSrc As New RectangleF(0, 0, bmap.Width / 2, bmap.Height / 2) 'PictureBox2のGraphicsオブジェクトの作成 Dim g As Graphics = PictureBox2.CreateGraphics() '表示 g.DrawImage(bmap, 0, 0, rectSrc, GraphicsUnit.Pixel) 'オブジェクトの破棄 bmap.Dispose() g.Dispose() End Sub
補足
ありがとうございます 僕の今ある条件にぴったりのソースです それと、DrawImage関数の書式とか教えてもらえませんか?rectSrcの部分がイマイチわかりません 回答、本当にありがとうございました
- TAGOSAKU7
- ベストアンサー率65% (276/422)
http://oshiete1.goo.ne.jp/kotaeru.php3?q=1262814 これが参考になりませんか?
補足
'切り取り範囲を指定 Dim rectSrc As New RectangleF(bmap.Width / 4 * 3, bmap.Height / 4 * 3, bmap.Width / 4, bmap.Height / 4) '貼り付け先を指定 Dim rectDst As New RectangleF(0, 0, bmap.Width / 2, bmap.Height / 2) ってどれに対応してるんですか?どこから切り取るかとかってどうやって決めるんですか? 自分のプログラムに当てはめることができていません...レベル低くてすいません
お礼
ご丁寧にどうもありがとうございました 僕も6.0時代はBitBlt+TransparentBltを乱用してたので、こういうのを覚えられ嬉しいです