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

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

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

Re[2]: 画像の拡大・縮小


(過去ログ 68 を表示中)

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

■39614 / inTopicNo.1)  画像の拡大・縮小
  
□投稿者/ AYM (7回)-(2009/08/11(Tue) 15:40:46)

分類:[.NET 全般] 

お世話になっております。
画像の拡大・縮小に対しての質問です。

開発環境は以下になります。
WindowsVista64Bit
VB.NET2008

ある画像を表示し、それに対して拡大・縮小を行いサイズによってスクロールバーをつけたいと思っております。
スクロールはパネルを使い、自動で表示するようにしています。

大きいファイルを表示したり、拡大するとスクロールバーは表示されるのですが、
画像がしっかりと表示されません。

以下がソースになります。
もし、何かお気づきの点がありましたらご教授お願い致します。

'// ファイル読み込み
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

        '// ファイル名読み込み処理割愛
        TestBitmap = New Bitmap(ofd.FileName)

        g_Draw = PictureBox1.CreateGraphics

        Rect = New RectangleF(0, 0, TestBitmap.Width, TestBitmap.Height)

        g_Draw.InterpolationMode = Drawing2D.InterpolationMode.NearestNeighbor
        PictureBox1.Refresh()
        g_Draw.DrawImage(TestBitmap, Rect)

        '// 倍率
        ExtValue = 100

        PictureBox1.Width = TestBitmap.Width
        PictureBox1.Height = TestBitmap.Height

End sub


'// 拡大処理
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click

        ExtValue += 10
        Ratio = ExtValue / 100

        Rect = New RectangleF(0, 0, TestBitmap.Width * Ratio, TestBitmap.Height * Ratio)

        PictureBox1.Size = New Size(TestBitmap.Width * Ratio, TestBitmap.Height * Ratio)
        PictureBox1.Refresh()

        g_Draw.InterpolationMode = Drawing2D.InterpolationMode.NearestNeighbor
        g_Draw.DrawImage(TestBitmap, Rect)

End Sub

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

        If Not TestBitmap Is Nothing Then
            g_Draw.InterpolationMode = Drawing2D.InterpolationMode.NearestNeighbor
            g_Draw.DrawImage(TestBitmap, Rect)
        End If

End Sub

引用返信 編集キー/
■39617 / inTopicNo.2)  Re[1]: 画像の拡大・縮小
□投稿者/ gtk2k (49回)-(2009/08/11(Tue) 16:01:09)
2009/08/11(Tue) 16:02:37 編集(投稿者)

No39614 (AYM さん) に返信
> お世話になっております。
> 画像の拡大・縮小に対しての質問です。
>
> 開発環境は以下になります。
> WindowsVista64Bit
> VB.NET2008
>
> ある画像を表示し、それに対して拡大・縮小を行いサイズによってスクロールバーをつけたいと思っております。
> スクロールはパネルを使い、自動で表示するようにしています。
>
> 大きいファイルを表示したり、拡大するとスクロールバーは表示されるのですが、
> 画像がしっかりと表示されません。
>
> 以下がソースになります。
> もし、何かお気づきの点がありましたらご教授お願い致します。
>
> '// ファイル読み込み
> Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
>
> '// ファイル名読み込み処理割愛
> TestBitmap = New Bitmap(ofd.FileName)
>
> g_Draw = PictureBox1.CreateGraphics
>
> Rect = New RectangleF(0, 0, TestBitmap.Width, TestBitmap.Height)
>
> g_Draw.InterpolationMode = Drawing2D.InterpolationMode.NearestNeighbor
> PictureBox1.Refresh()
> g_Draw.DrawImage(TestBitmap, Rect)
>
> '// 倍率
> ExtValue = 100
>
> PictureBox1.Width = TestBitmap.Width
> PictureBox1.Height = TestBitmap.Height
>
> End sub
>
>
> '// 拡大処理
> Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
>
> ExtValue += 10
> Ratio = ExtValue / 100
>
> Rect = New RectangleF(0, 0, TestBitmap.Width * Ratio, TestBitmap.Height * Ratio)
>
> PictureBox1.Size = New Size(TestBitmap.Width * Ratio, TestBitmap.Height * Ratio)
> PictureBox1.Refresh()
>
> g_Draw.InterpolationMode = Drawing2D.InterpolationMode.NearestNeighbor
> g_Draw.DrawImage(TestBitmap, Rect)
>
> End Sub
>
> Private Sub PictureBox1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles PictureBox1.Paint
>
> If Not TestBitmap Is Nothing Then
> g_Draw.InterpolationMode = Drawing2D.InterpolationMode.NearestNeighbor
> g_Draw.DrawImage(TestBitmap, Rect)
> End If
>
> End Sub
>

CreateGraphicsで作成したGraphicsオブジェクトをフィールド変数かなんかに突っ込んで
別メソッド内で使用してはいけない。
CreateGraphicsで作成したGraphicsオブジェクトは、基本的にその関数内でDisposeすること。
また、Paintイベント内においては、引数のGraphicsプロパティを使用すること(e.Graphics)。
Paintイベント引数のGraphicsプロパティは逆にDisposeしてはいけない。
引用返信 編集キー/
■39619 / inTopicNo.3)  Re[2]: 画像の拡大・縮小
□投稿者/ AYM (8回)-(2009/08/11(Tue) 16:09:36)
>>gtk2kさん
ありがとうございます。
表示されない件はCPUパワーにも依存するみたいで、ゆっくり動かしたら表示されていたようです。
とは言え、ご指摘の部分を直したら以前よりかなりスムーズに表示されるようになりました。
回答ありがとうございました。
解決済み
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -