KingDZ 变菜鸟,每日一个C#小实例之---百叶窗图片展示
這回給大家做的一個(gè)效果圖如下:
看到了嗎?哈哈,我們C# 也可以做出來很好的效果哦,我們下面開始吧。
首先大家要熟悉 Bitmap? 的用法,因?yàn)槲覀冞@次就是用到了這種位圖。。還有可能需要大家了解一些GDI的繪圖操作,以方便我們這節(jié)課程的應(yīng)用。首先我們先直接給 PictrueBox 指定一張圖片。
好了,下面的一個(gè)技巧就是 直接將? PictrueBox? 里面的圖片復(fù)制到 Bitmap 里面去 這么著我們就可以很簡單的去操作這張圖片了。
background = (Bitmap)pic.Image.Clone(); //克隆圖片到 Bitmap 中去。好了,下面我們將這張圖片的像素拆開。
int dw = background.Width / 10; //按照每個(gè)圖片30個(gè)像素分解圖片 int dh = background.Height; //圖片的高度 Graphics g = pic.CreateGraphics(); //創(chuàng)建一個(gè) Graphics Point[] myPoint = new Point[10]; //得到一個(gè)坐標(biāo)數(shù)組 for (int x = 0; x < 10; x++) {myPoint[x].Y = 0;myPoint[x].X = x * dw; } 好了,我已經(jīng)稍微寫了一些注釋,其實(shí),簡單的理解一下,就是說我們將這張圖片? 給分解開了,為下面的重繪做準(zhǔn)備。百葉窗,顧名思義,就是一張圖片分成幾部分,然后依次展示即可。
//開始重繪Bitmap bitmap = new Bitmap(background.Width, background.Height);//循環(huán)分解成了多少張圖片for (int i = 0; i < dw; i++){//取上面數(shù)據(jù)中對(duì)應(yīng)的坐標(biāo)點(diǎn)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坐標(biāo),Y坐標(biāo),這個(gè)點(diǎn)的顏色)//開始重繪}}pic.Refresh(); //不斷的刷新pic,出現(xiàn)頁面假死現(xiàn)象,其實(shí)可以用多線程解決pic.Image = bitmap;}好了,現(xiàn)在我們其實(shí)主要需要理解的就是,上面的那三層循環(huán)了,最外面的是循環(huán)每一個(gè)? 分解后的圖片的 X坐標(biāo)【可以這么理解,就是每個(gè)小圖片的原點(diǎn)X坐標(biāo)】
第二個(gè)循環(huán)代表的是? 每個(gè)小圖片的 像素,大家可以自己看一下,其實(shí)就是用? bitmap 不斷的取像素,然后一點(diǎn)點(diǎn)的重繪圖片。
頁面這么著實(shí)現(xiàn),會(huì)造成假死現(xiàn)象,大家可以使用多線程的方法,優(yōu)化我們的代碼。
好了,就說這么多巴,大家可以自己實(shí)現(xiàn)縱向百葉窗效果。
代碼下載
ManyPic.rar
轉(zhuǎn)載于:https://www.cnblogs.com/hihell/archive/2011/09/14/2176167.html
總結(jié)
以上是生活随笔為你收集整理的KingDZ 变菜鸟,每日一个C#小实例之---百叶窗图片展示的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: bigtall的敏捷日记(1)
- 下一篇: WinForm(C#)Checkedli