KingDZ 变菜鸟,每日一个C#小实例之---百叶窗图片展示

这回给大家做的一个效果图如下:

1

看到了吗?哈哈,我们C# 也可以做出来很好的效果哦,我们下面开始吧。

首先大家要熟悉 Bitmap  的用法,因为我们这次就是用到了这种位图。。还有可能需要大家了解一些GDI的绘图操作,以方便我们这节课程的应用。首先我们先直接给 PictrueBox 指定一张图片。

·

好了,下面的一个技巧就是 直接将  PictrueBox  里面的图片复制到 Bitmap 里面去 这么着我们就可以很简单的去操作这张图片了。

            background = (Bitmap)pic.Image.Clone();  //克隆图片到 Bitmap 中去。

好了,下面我们将这张图片的像素拆开。

int dw = background.Width / 10;            //按照每个图片30个像素分解图片
int dh = background.Height;             //图片的高度
Graphics g = pic.CreateGraphics();      //创建一个 Graphics
Point[] myPoint = new Point[10];        //得到一个坐标数组
for (int x = 0; x < 10; x++)             
{
    myPoint[x].Y = 0;
    myPoint[x].X = x * dw;
}
好了,我已经稍微写了一些注释,其实,简单的理解一下,就是说我们将这张图片  给分解开了,为下面的重绘做准备。

百叶窗,顾名思义,就是一张图片分成几部分,然后依次展示即可。

//开始重绘
    Bitmap bitmap = new Bitmap(background.Width, background.Height);
    //循环分解成了多少张图片
    for (int i = 0; i < dw; i++)
    {
        //取上面数据中对应的坐标点
        for (int j = 0; j < 10; j++)
        {
            for (int k = 0; k < dh; k++)
            {
                bitmap.SetPixel(myPoint[j].X + i, myPoint[j].Y + k, background.GetPixel(myPoint[j].X + i, myPoint[j].Y + k));
                //SetPixel  (X坐标,Y坐标,这个点的颜色)
                //开始重绘
            }
        }
        pic.Refresh();   //不断的刷新pic,出现页面假死现象,其实可以用多线程解决
        pic.Image = bitmap;
    }

好了,现在我们其实主要需要理解的就是,上面的那三层循环了,最外面的是循环每一个  分解后的图片的 X坐标【可以这么理解,就是每个小图片的原点X坐标】

第二个循环代表的是  每个小图片的 像素,大家可以自己看一下,其实就是用  bitmap 不断的取像素,然后一点点的重绘图片。

页面这么着实现,会造成假死现象,大家可以使用多线程的方法,优化我们的代码。

好了,就说这么多巴,大家可以自己实现纵向百叶窗效果。

·

代码下载

ManyPic.rar

posted @ 2011-09-14 14:34  KingDZ  阅读(3159)  评论(2编辑  收藏  举报