下面是代码:
try 
    { 
        MyBitmap = (Bitmap)this.pictureBox1.Image.Clone(); 
        int dw = MyBitmap.Width / 30; 
        int dh = MyBitmap.Height; 
        Graphics g = this.pictureBox1.CreateGraphics(); 
        g.Clear(Color.Gray); 
        Point[] MyPoint = new Point[30]; 
        for (int x = 0; x < 30; x++) 
        { 
            MyPoint[x].Y = 0; 
            MyPoint[x].X = x * dw; 
        } 
        Bitmap bitmap = new Bitmap(MyBitmap.Width, MyBitmap.Height); 
        for (int i = 0; i < dw; i++) 
        { 
            for (int j = 0; j < 30; j++) 
            { 
                for (int k = 0; k < dh; k++) 
                { 
                    bitmap.SetPixel(MyPoint[j].X + i, MyPoint[j].Y + k, MyBitmap.GetPixel(MyPoint[j].X + i, MyPoint[j].Y + k)); 
                } 
            } 
            this.pictureBox1.Refresh(); 
            this.pictureBox1.Image = bitmap; 
            System.Threading.Thread.Sleep(100); 
        } 
    } 
    catch (Exception ex) 
    { 
        MessageBox.Show(ex.Message, "信息提示"); 
    } 请问这几行代码:
for (int i = 0; i < dw; i++) 
        { 
            for (int j = 0; j < 30; j++) 
            { 
                for (int k = 0; k < dh; k++) 
                { 
                    bitmap.SetPixel(MyPoint[j].X + i, MyPoint[j].Y + k, MyBitmap.GetPixel(MyPoint[j].X + i, MyPoint[j].Y + k)); 
                } 
            } 
            this.pictureBox1.Refresh(); 
            this.pictureBox1.Image = bitmap; 
            System.Threading.Thread.Sleep(100); 
        } 
是什么意思。小弟看不懂。请高手指教。

解决方案 »

  1.   

    MyBitmap 与 bitmap 宽和高相同
    图像被水平分割了30等份,即30片百叶
    for (int i = 0; i < dw; i++)   //dw 一片百叶的宽度
            { 
                for (int j = 0; j < 30; j++) //30片百叶
                { 
                    for (int k = 0; k < dh; k++)   //一片百叶的高度
                    { 
                        bitmap.SetPixel(MyPoint[j].X + i, MyPoint[j].Y + k, MyBitmap.GetPixel(MyPoint[j].X + i, MyPoint[j].Y + k)); 
                    } 
                }             //到这里30片百叶都以从左到右的顺序绘制了1列
                  //然后显示到屏幕,显示100豪秒
                this.pictureBox1.Refresh(); 
                this.pictureBox1.Image = bitmap; 
                System.Threading.Thread.Sleep(100); 
                //继续绘制下一列
            } 
      

  2.   

    这是一段效率并不是很高的图片动态特效代码.
    代码的意思,是通过几个分段的循环,通过GetPixel和SetPixel把目标图片上相应的区域绘制到新图片上.