KingDZ 变菜鸟,每日一个C#小实例之---百叶窗图片展示
这回给大家做的一个效果图如下:
看到了吗?哈哈,我们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 不断的取像素,然后一点点的重绘图片。
页面这么着实现,会造成假死现象,大家可以使用多线程的方法,优化我们的代码。
好了,就说这么多巴,大家可以自己实现纵向百叶窗效果。
代码下载
作者:KingDZ
出处:http://www.cnblogs.com/hihell/
关于作者:作者喜欢编程,擅长ASP.NET网站开发,喜欢MVC,SilverLight开发,喜欢交流,喜欢创新
我的QQ:860866679 MSN:wangdezhen@live.com 期待有共同志向者交流进步。
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,如有问题
可以通过KingDZ's
Email 联系我,非常感谢。