这是一段移动图片的代码
图片是64*64的。
  private void panel1_Paint(object sender, PaintEventArgs e)
        {
            string file = @"D:\d.JPG";
            int a = 0;
            if (a == 0)
            {
                for (int i = 0; i < 500; i++)
                {
                    Draw.DrawImage(file, panel1,i,0);//自己用dx封装的一个简单的类
                    Application.DoEvents();
                }
            }
            else
            {
                for (int i = 0; i < 500; i++)
                {                    e.Graphics.DrawImage(Image.FromFile(file), i, 0);
                    Application.DoEvents();
                }
            }
前者是DX绘图。后者是GDI+。
但是在移动速度上后者比前者快好几倍~~
是不是我的代码有什么地方不对?这是draw.drawImage的代码:
        public static void DrawImage(String File, Control control,int x,int y)
        {
            pp.Windowed = true;
            pp.SwapEffect = SwapEffect.Discard;
            de = new Device(0, DeviceType.Hardware, control, CreateFlags.HardwareVertexProcessing, pp);
            sp = new Sprite(de);
            te = TextureLoader.FromFile(de, File);
            de.BeginScene();
            de.Clear(ClearFlags.Target, Color.White, 1.0f, 0);
            sp.Begin(SpriteFlags.AlphaBlend);
            sp.Draw(te, Vector3.Empty, new Vector3(x, y, 0), Color.White.ToArgb());
            sp.End();
            de.EndScene();
            de.Present();
            te.Dispose();
            de.Dispose();
            sp.Dispose();
        }

解决方案 »

  1.   

    一定要重新画吗?
    移动panel的坐标不行吗?
      

  2.   

    DX绘图,应该是取数据,而不是反向推数据,即DX绘图完成后,再来取数据,你这边做的就是判断是否有变化,有变化返回数据,无变化就不返回缓存数据。
    你现在的代码跟我以前写的代码原理好像完全不同!你现在的写法是慢的电脑运行慢,快的电脑运行快,但不会出现跳贴的情况。