C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: PictureBox拡大について


(過去ログ 103 を表示中)

[トピック内 3 記事 (1 - 3 表示)]  << 0 >>

■61712 / inTopicNo.1)  PictureBox拡大について
  
□投稿者/ ド素人 (6回)-(2011/08/30(Tue) 21:28:25)

分類:[.NET 全般] 

2011/08/31(Wed) 06:05:14 編集(投稿者)
いつもお世話になっております。

下記のコードは、ピクチャボックスの画像をクリックして拡大、縮小表示できるようにするコードですが
(http://dobon.net/vb/dotnet/graphics/zoominout.html)、このコードを変更して、ピクチャボックスに描かれている図
(DrawEllipse、DrawLine等)を拡大させることは可能でしょうか?
クリックした所を中心にピクチャーボックスが、拡大出来るようにしたです。

ご存知の方、どうかご教授お願いいたします。


引用返信 編集キー/
■61713 / inTopicNo.2)  Re[1]: PictureBox拡大について
□投稿者/ Azulean (832回)-(2011/08/30(Tue) 22:25:31)
単純には以下の Tips で作った img を拡大すればよいでしょう。
ただし、この方法は拡大率によっては線がギザギザに見えるといった問題があると思われます。
http://dobon.net/vb/dotnet/graphics/createimage.html

次点として、ScaleTransform や TranslateTransform を使うことです。
使い方については調べてみてください。(この方法はベクトル的に拡大するので補間を設定すればギザギザはましになります)
引用返信 編集キー/
■61737 / inTopicNo.3)  Re[2]: PictureBox拡大について
□投稿者/ shu (965回)-(2011/08/31(Wed) 23:32:23)
2011/08/31(Wed) 23:32:35 編集(投稿者)
Trans使った例です。

    Private dx As Single = 0.0!
    Private dy As Single = 0.0!
    Private zm As Single = 1.0!

    Private Sub PictureBox1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles PictureBox1.Click
        Dim pos = PictureBox1.PointToClient(Control.MousePosition)
        Dim x1 = pos.X
        Dim y1 = pos.Y

        dx += ((PictureBox1.Width) / 2 - pos.X) / zm
        dy += ((PictureBox1.Height) / 2 - pos.Y) / zm

        zm = (((zm - 0.75!) * 4) Mod 10) * 0.25! + 1.0!

        PictureBox1.Invalidate()
    End Sub

    Private Sub PictureBox1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles PictureBox1.Paint
        Dim grp = e.Graphics

        grp.Clear(Color.White)

        grp.ScaleTransform(zm, zm)
        grp.TranslateTransform((PictureBox1.Width / 2) * (1 - zm) / zm + dx, (PictureBox1.Height / 2) * (1 - zm) / zm + dy)

        Using brs = New Drawing2D.LinearGradientBrush(New Point(0, 0), New Point(20, 20), Color.Blue, Color.Green)
            grp.FillRectangle(brs, (PictureBox1.Width \ 8) * 3, (PictureBox1.Height \ 8) * 3, PictureBox1.Width \ 4, PictureBox1.Height \ 4)
        End Using

        grp.ResetTransform()

        grp.DrawLine(Pens.Red, 0, PictureBox1.Height \ 2, PictureBox1.Width, PictureBox1.Height \ 2)
        grp.DrawLine(Pens.Red, PictureBox1.Width \ 2, 0, PictureBox1.Width \ 2, PictureBox1.Height)
    End Sub

引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -