★搜Asp.net★(www.soAsp.net),为专业技术文档网站。
包括Asp.net开发技术文档·C#开发技术文档·Access/SQL Server数据库开发技术文档·VB.NET开发技术文档。
还包括·项目实战经验总结·开发经验技巧总结·项目开发心得。


  
C#实现百叶窗效果显示图片

百叶窗有两种显示效果,一种是垂直百叶窗,另一种是水平百叶窗。

实现百叶窗显示图像有两种方式:一是根据窗口或图像的高度或宽度和定制的百叶窗显示条宽度计算百叶窗的显示的条数量;二是根据窗口或图像的高度或宽度和定制的百叶窗显示条数量计算百叶窗的显示的条宽度。

垂直百叶窗实现代码如下:

private void button1_Click(object sender, EventArgs e)
{
   //垂直百叶窗显示图像
    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, "信息提示");
    }
}

水平百叶窗实现代码如下:

private void button3_Click(object sender, EventArgs e)
{
    //水平百叶窗显示图像
    try
    {
        MyBitmap = (Bitmap)this.pictureBox1.Image.Clone();
        int dh = MyBitmap.Height / 20;
        int dw = MyBitmap.Width;
        Graphics g = this.pictureBox1.CreateGraphics();
        g.Clear(Color.Gray);
        Point[] MyPoint = new Point[20];
        for (int y = 0; y < 20; y++)
        {
            MyPoint[y].X = 0;
            MyPoint[y].Y = y * dh;
        }
        Bitmap bitmap = new Bitmap(MyBitmap.Width, MyBitmap.Height);
        for (int i = 0; i < dh; i++)
        {
            for (int j = 0; j < 20; j++)
            {
                for (int k = 0; k < dw; k++)
                {
                    bitmap.SetPixel(MyPoint[j].X + k, MyPoint[j].Y + i, MyBitmap.GetPixel(MyPoint[j].X + k, MyPoint[j].Y + i));
                }
            }
            this.pictureBox1.Refresh();
            this.pictureBox1.Image = bitmap;
            System.Threading.Thread.Sleep(100);
        }
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message, "信息提示");
    }
}