這回給大家做的一個如下:
看到了嗎?哈哈,我們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(); //建立一個 GraphicsPoint[] 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