关于Graphics.FromImage的问题

理理还是乱 2017-07-27 11:33:29
本人是刚人门vb.net的小白,在做按钮控制图形缩放的实验遇到了一些问题。我想实现的效果是按下按钮时图片缩放一个等级,并且原图随即消失。源代码如下,已经测试过可以实现想要的效果。

Public Class Form1
Dim i As Integer = 0
Dim map As Bitmap = New Bitmap("E:\123.jpg")

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim e_map As Bitmap = New Bitmap(Me.Width, Me.Height)
Dim gg As Graphics = Graphics.FromImage(e_map)
Dim g As Graphics = Me.CreateGraphics

gg.Clear(Color.White)
gg.DrawImage(map, 0, 0, 600 - i, 400 - i)
g.DrawImage(e_map, 0, 0)
i = i + 5
g.Dispose()
gg.Dispose()
End Sub
End Class

我的问题是,为什么我把gg.Clear(Color.White)放在了第一的位置,它依然能够清除上一张图片?明明上一张图片已经被我用 Dispose()释放掉了。
还有
Dim e_map As Bitmap = New Bitmap(Me.Width, Me.Height)
为什么这句必须放在函数体内,如果放在函数外,就会出现非常奇怪的现象:g变成了一个很小的正方形,按照我设置的它应该等同于整个窗体的大小。
...全文
640 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
dongyisheng 2017-07-29
  • 打赏
  • 举报
回复
我先回答 最后一个问题 // Dim e_map As Bitmap = New Bitmap(Me.Width, Me.Height) 为什么这句必须放在函数体内,如果放在函数外,就会出现非常奇怪的现象:g变成了一个很小的正方形,按照我设置的它应该等同于整个窗体的大小。 原因是,如果放在函数外,那时候窗体还没有初始化,所以值很小。
理理还是乱 2017-07-27
  • 打赏
  • 举报
回复
我的意思是在那个函数体内,除了前面的定义部分,clear()放在了首位,这个时候clear()应该清除的是本次调用函数创建的gg对象吧?但我想要清除的是上一次调用函数创建的gg,因为在上一个gg里填充了图片。函数体最后加了gg.Dispose(),难道本次调用的clear()还能清除上一次调用的gg吗?
xdashewan 2017-07-27
  • 打赏
  • 举报
回复
不知所云,哪里是第一的位置,Dim gg As Graphics = Graphics.FromImage(e_map)每次重新获得了gg,e_map放外面你用的了Me.Width?

16,554

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧