(C#) 小弟是想做一个飞机飞行的效果,,先用一张天空白云的图片不断地从窗体的上端向下端播放。。然后用PictureBox加载一张图片。。将PictureBox的背景透明掉。。图片的指定颜色透明掉。。这样效果就比较好看了。。
但是,,,,,
运行时,PictureBox的背景色却一直都在。。不知为什么,,恳求高手帮帮小弟。。小弟无尽的感激。。谢谢! public Image plane;
 public Form1()
        {
            InitializeComponent();
            this.Paint += delegate
            {
                DrawPlane();
            };
        } public void DrawPlane()
        {
            plan = new Bitmap("plan.jpg");
            plan.MakeTransparent(Color.Black);            PictureBox pb = new PictureBox();
            pb.BackColor = Color.Transparent;
            pb.BackgroundImage = plan;
            pb.BackgroundImageLayout = ImageLayout.Stretch;
            pb.Top = 550;
            pb.Left = 207;            this.Controls.Add(pb); 
        }

解决方案 »

  1.   


    云图片用gif,本身带透明
    然后程序里加载,
    建立路径GraphicPath GP
    for i 宽度
     for j 高度
      循环 图片每个像素
        如果GetPixel(i,j)!=Color.Empty( 或者写成Color.FromArgb(0,0,0) )
             GP.AddRectangle(new Rectangle(i,j,1,1)) 把这点加入路径最后picturebox1.Region=new Region(GP)             
      

  2.   

    我只会这种:
    手动建个pictureBox1Color col = Color.FromArgb(0, 255, 255, 255);//背景透明度0
    pictureBox1.BackColor = col;手动建个ImageList1(属性里设置TransparentColor为黑色)
    把你的飞机加进去,
    用pictureBox1.BackgroundImage=imageList1.Images[0];来用,天空(云)的做在Form1() 的背景里,这样飞机能在Form1()前面透明。
    (用另一个pictureBox不行)要动的话,gif的方法我不懂,我用
    全局:
    int x=0;
    System.Timers.Timer play = new System.Timers.Timer(100);
    Form1_load里:
    play.Elapsed += new System.Timers.ElapsedEventHandler(theout);替换图片:
    public void theout(object source, System.Timers.ElapsedEventArgs e)
            {
                
                pictureBox1.BackgroundImage = imageList1.Images[x];
                            
                x++;
                if (x == imageList1.Images.Count ) 
                {
                   
                    x = 0;
                }        }前提是有连续的多张图片放在imagelist里,切换时动画。(透明色有效,去背景有效)
    不知楼主的“先用一张天空白云的图片不断地从窗体的上端向下端播放”怎么做...
      

  3.   

     private void timer1_Tick(object sender, EventArgs e)
            {
                
                System.Drawing.Graphics g;
                g = this.CreateGraphics();   
                background = Image.FromFile(Application.StartupPath + @"\image\2.jpg");       //获取背景图片            g.DrawImage(background, 0, B - 635, 510, 635);                               
                g.DrawImage(background, 0, B, 510, 635);                                        
                B += 5;
                if (B > 635)
                {
                    B = 0;
                }
            }图片不断地从窗体的上端向下端播放代码
      

  4.   

    是不是jpg里面的黑色并非纯黑的问题,用取色器取看看一下
      

  5.   


    我已经用PS  P过那张飞机的图片。绝对是全黑色的
      

  6.   


    要做出天空白云在移动的效果,直接单张图片框该坐标就行了~我这里说的是你飞机需不需要动画,(比如引擎的火焰or烟雾效果),移动效果没必要这么麻烦,
    控件透明,我所知道了只有ImageList的用起来效果最好,改坐标的移动也没问题,但是只能相对于主窗口透明,对于其他控件没办法,楼主加油吧~