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