VB2008背景問題

Home Home
引用 | 編輯 za08280714
2011-08-09 23:35
樓主
推文 x0
又來麻煩大大了.這次是背景的圖片.圖片我有用photoshop去背的做法.001的那張圖可以跟背景ㄧ ..

訪客只能看到部份內容,免費 加入會員



獻花 x0
引用 | 編輯 ebolaman
2011-08-10 09:50
1樓
  
一個簡單的解決辦法:

將圖片存成 gif 格式,設定 白色 為透明色

接著在 PictureBox 的屬性選 BackColor >> Web >> Transparent





就能讓白色部分透明,而與背景圖交疊

獻花 x1
引用 | 編輯 za08280714
2011-08-10 19:50
2樓
  
大大謝謝你.照你說得方式.背景已經透明了.可是又出現了ㄧ個問題.我用個簡單程式讓圖移動.移動進行中圖片透明正方形的框框也跟這移動.動起來像是ㄧ張圖在動.有沒有辦法修改成只有顏色的紅點在移動.周圍的環境還是跟背景ㄧ樣.看起來很自然

註:檔案超過2000K.我把程式跟圖片分開



Public Class Form1
    Dim m_x, m_y, a_X, a_Y As Integer
    Dim mdir As String
    Private Sub Form1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown
        Select Case e.KeyCode
            Case Keys.Right
                mdir = "R"
                Timer1.Enabled = True
        End Select

    End Sub
    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
        m_x = m_x + 25
        pb_ghost.Location = New Point(m_x, m_y)
    End Sub
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        m_x = 140 : m_y = 490
    End Sub
End Class

本帖包含附件
檔名: zip 新圖片.rar   (2022-06-09 14:18 / 1431 KB)   下載次數:2


獻花 x0
引用 | 編輯 ebolaman
2011-08-10 22:20
3樓
  
下面是引用 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 的物件:

本帖包含附件
檔名: zip Pic_Move.rar   (2022-06-09 14:18 / 778 KB)   下載次數:4


獻花 x0
引用 | 編輯 za08280714
2011-08-11 20:33
4樓
  
大大程式碼我有試看看可是還是沒有效果.在網路看到的[圖片閃動(閃爍),英文稱 Graphics flicker] 都寫的很亂看不太懂.至於PictureBox 不顯示(Visible=0) 有放上去圖片就整個沒顯示了 .我有重新換了比較小的程式上傳上去.我試了好多方式都沒效果.請大大幫我修改ㄧ下.感恩

本帖包含附件
檔名: zip 123.zip   (2022-06-09 14:18 / 405 KB)   下載次數:1


獻花 x0
引用 | 編輯 za08280714
2011-08-11 21:14
5樓
  
大大VB2008背景問題 我已經用好了.結果是異想不到的.我都沒改程式.而是重新作張圖片.
再放上去.結果 就沒有圖片閃動(閃爍),就沒有這個問題了.感謝大大

獻花 x0
引用 | 編輯 iamboss123
2014-01-12 14:37
6樓
  
用Google 查一下 double buffer 的應用

獻花 x0