下面是引用 za08280714 於 2011-08-10 19:50 發表的 :
大大謝謝你.照你說得方式.背景已經透明了.可是又出現了ㄧ個問題.我用個簡單程式讓圖移動.移動進行中圖片透明正方形的框框也跟這移動.動起來像是ㄧ張圖在動.有沒有辦法修改成只有顏色的紅點在移動.周圍的環境還是跟背景ㄧ樣.看起來很自然
註:檔案超過2000K.我把程式跟圖片分開
Public Class Form1
Dim m_x, m_y, a_X, a_Y As Integer
.......
這好像是叫做 圖片閃動(閃爍),英文稱 Graphics flicker
可以去 Google 查一下 double buffer 的應用,聽說可以去除圖片閃爍的問題
但是我在這邊用了一個非常簡單的方法,我並不知道原理為何:
方法如下:
將 PictureBox 不顯示(Visible=0) ,改在 Form1_Paint() 中加入繪圖的部分
並設定 Me.SetStyle(ControlStyles.AllPaintingInWmPaint Or ControlStyles.OptimizedDoubleBuffer Or ControlStyles.UserPaint, True)
就這樣圖片不會閃爍了
複製程式
Public Class Form1
Dim g As Graphics = Me.CreateGraphics()
Private Sub timer_move_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles timer_move.Tick
Static ti As Integer
pic_red.Left += 10
Me.Refresh()
ti += 1
If ti >= 10 Then timer_move.Enabled = False
End Sub
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
SetStyle(ControlStyles.AllPaintingInWmPaint Or ControlStyles.OptimizedDoubleBuffer Or ControlStyles.UserPaint, True)
pic_red.Visible = False
End Sub
Private Sub Form1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint
e.Graphics.DrawImage(pic_red.Image, pic_red.Left, 0)
End Sub
End Class
可以下載看看範例,注意執行過程中圖片是 graphics.DrawImage 畫出來的,並不是 PictureBox 的物件: