免费观看又色又爽又黄的小说免费_美女福利视频国产片_亚洲欧美精品_美国一级大黄大色毛片

C#中怎么創(chuàng)建一個動態(tài)圖像按鈕

本篇文章為大家展示了C#中怎么創(chuàng)建一個動態(tài)圖像按鈕,內(nèi)容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。

創(chuàng)新互聯(lián)專注于阿爾山網(wǎng)站建設服務及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗。 熱誠為您提供阿爾山營銷型網(wǎng)站建設,阿爾山網(wǎng)站制作、阿爾山網(wǎng)頁設計、阿爾山網(wǎng)站官網(wǎng)定制、重慶小程序開發(fā)公司服務,打造阿爾山網(wǎng)絡公司原創(chuàng)品牌,更為您提供阿爾山網(wǎng)站排名全網(wǎng)營銷落地服務。

我們要創(chuàng)建的控件簡單說就是一個動態(tài)漸變的C#動態(tài)圖像按鈕

這個button控件依舊繼承自UserControl,UserControl是制作自定義UI控件絕對的父類,這里不再細說。我們?yōu)檫@個button取名為DynamicImageButton。制作圖像按鈕當然離不開繪制,所以還得用到GDI+,我曾經(jīng)寫過多篇關于界面元素的文章,比如”利用.Net繪圖技術制作水晶按鈕控件”、” 利用C#實現(xiàn)任務欄通知窗口”、” 利用C#為數(shù)碼照片添加拍照日期”、” C#實現(xiàn)運行時拖動控件并調(diào)整控件大小”等等,其中都會涉及到GDI+的諸多方面,可見GDI+在設計制作UI上是多么的重要啊!

對于按鈕圖片透明度漸變的操作則比較有技巧,采取了個人認為比較另類卻極其高效的方法。制作圖片按鈕肯定是要為這個button賦值一個圖像文件的,我們需要公開一個屬性,代碼如下:

public Bitmap Image  {  get { return bmp[0]; }  set  {  bmp[0] = value;  bmp[1] = returnAlpha(value, 60);  bmp[2] = returnAlpha(value, 120); ;  bmp[3] = returnAlpha(value, 180); ;  draw();  }  }

大家注意到,當給這個DynamicImageButton的 image屬性賦值一幅圖片后,立即就會對這個原始圖片經(jīng)過4種不同的alpha過濾后分別存放到bmp位圖數(shù)組下。bmp[0]保存原始圖像,bmp[3]的圖像則最透明。這就是本程序的特點所在,也就是在運行時是不進行圖像透明度漸變計算的,在給image屬性賦值時計算工作同時也已經(jīng)完成了,這樣可以省下鼠標移動事件的巨大計算量。

returnAlpha方法就是將原始圖像中的每一個像素按照相應的alpha值進行重新繪制后保存在bmp數(shù)組中,不同透明度的圖像作為bmp數(shù)組的不同元素進行保存。代碼如下:

public static Bitmap returnAlpha(Bitmap bmp, int alpha)  {  Color col;  Bitmap bmp2 = new Bitmap(bmp);  for (int i = 0; i < bmp.Width; i++)  for (int j = 0; j < bmp.Height; j++)  {  col = bmp.GetPixel(i, j);  if (col.A > 0)  bmp2.SetPixel(i, j, Color.FromArgb(min(col.A - alpha), col.R, col.G, col.B));  }  return bmp2;  }

到這里大家可能就已經(jīng)明白我的用意了,沒錯!從原始圖像到最終圖像的透明漸變我只設計了4幀!其實,這對于一個小小的button動畫來說已經(jīng)完全足夠了。對于圖像的繪制方法我們?nèi)耘f采用雙緩沖區(qū)繪制,也就是內(nèi)存復制,實際上就是雙bitmap對象交替使用,這樣可以更好的防止圖像閃爍(參見我的另一篇文章” .NET框架下使用雙緩沖技術繪圖”)。相關代碼如下:

private void DynamicImageButton_Paint(object sender, System.EventArgs e)  {  g2 = Graphics.FromImage(dblbuffer);  g2.Clear(this.BackColor);  curx = (int)((double)Width) / 6;  cury = (int)((double)Height) / 6;  curwidth = (int)((double)Width) / 3 * 2;  curheight = (int)((double)Height) / 3 * 2;  itvwidth = (Width - curwidth) / 2;  g2.DrawImage(bmp[3], curx, cury, curwidth, curheight);  g.DrawImageUnscaled(dblbuffer, 0, 0);  }

然后就是對C#動態(tài)圖像按鈕大小漸變的控制了,如下圖所示:

C#中怎么創(chuàng)建一個動態(tài)圖像按鈕

a、b、c和d四個矩形代表不同大小的4個幀,a幀是裝載圖像時的默認大小,就是bmp[0]的圖像,也是4幀中***的一幀,width=75和 height=72是我們示例程序控件的大小,網(wǎng)友可以隨意對長寬進行重新設定。這兩個數(shù)值是基礎,bmp[0]的圖像會完全填充到這個區(qū)域內(nèi),在這個給定的長和寬的基礎上我們計算出b、c和d三幀的圖像大小和位置。然后創(chuàng)建一個計數(shù)器,當鼠標Enter或者Leave我們創(chuàng)建的這個 DynamicImageButton時對圖像的透明度和大小的漸變進行控制。相關代碼如下:

private void timer1_Tick(object sender, EventArgs e)  {  if (mp == enumMousePosition.Enter)  {  if ((curx <= 0) || (cury <= 0) || (Width == curwidth) || (Height == curheight))  {  return;  }  g2 = Graphics.FromImage(dblbuffer);  g2.Clear(this.BackColor);  //g2.Clear(Color.White);  if (curx >= itvwidth-2)  {  g2.DrawImage(bmp[3], curx - 1, cury - 1, curwidth + 2, curheight + 2);  }  else if ((curx>= itvwidth / 3 * 2) && (curx < itvwidth))  {  g2.DrawImage(bmp[2], curx - 1, cury - 1, curwidth + 2, curheight + 2);  }  else if ((curx >= itvwidth / 3) && (curx <= itvwidth / 3 * 2))  {  g2.DrawImage(bmp[1], curx - 1, cury - 1, curwidth + 2, curheight + 2);  }  else if ((curx >= 0) && (curx <= itvwidth / 3))  {  g2.DrawImage(bmp[0], curx - 1, cury - 1, curwidth + 2, curheight + 2);  }  g.DrawImageUnscaled(dblbuffer, 0, 0);  curx--;  cury--;  curwidthcurwidth = curwidth + 2;  curheightcurheight = curheight + 2;  if ((curx <= 0) || (cury <= 0) || (Width == curwidth) || (Height == curheight))  {  timer1.Stop();  }  }  else if (mp == enumMousePosition.Leave)  {  if ((curx >= (int)((double)Width) / 6) ||  (cury >= (int)((double)Height) / 6) ||  (curwidth <= (int)((double)Width) / 3 * 2) ||  (curheight == (int)((double)Height) / 3 * 2))  {  return;  }  g2 = Graphics.FromImage(dblbuffer);  g2.Clear(this.BackColor);  //g2.Clear(Color.White);  if (curx >= itvwidth-2)  {  g2.DrawImage(bmp[3], curx - 1, cury - 1, curwidth + 2, curheight + 2);  }  else if ((curx >= itvwidth / 3 * 2) && (curx < itvwidth))  {  g2.DrawImage(bmp[2], curx - 1, cury - 1, curwidth + 2, curheight + 2);  }  else if ((curx >= itvwidth / 3) && (curx <= itvwidth / 3 * 2))  {  g2.DrawImage(bmp[1], curx - 1, cury - 1, curwidth + 2, curheight + 2);  }  else if ((curx >= 0) && (curx <= itvwidth / 3))  {  g2.DrawImage(bmp[0], curx - 1, cury - 1, curwidth + 2, curheight + 2);  }  g.DrawImageUnscaled(dblbuffer, 0, 0);  curx++;  cury++;  curwidthcurwidth = curwidth - 2;  curheightcurheight = curheight - 2;  if ((curx >= (int)((double)Width) / 6) ||  (cury >= (int)((double)Height) / 6) ||  (curwidth <= (int)((double)Width) / 3 * 2) ||  (curheight == (int)((double)Height) / 3 * 2))  {  timer1.Stop();  }  }  }

上述內(nèi)容就是C#中怎么創(chuàng)建一個動態(tài)圖像按鈕,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注創(chuàng)新互聯(lián)行業(yè)資訊頻道。

文章名稱:C#中怎么創(chuàng)建一個動態(tài)圖像按鈕
分享鏈接:http://m.newbst.com/article44/ggpshe.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站設計公司小程序開發(fā)關鍵詞優(yōu)化App開發(fā)品牌網(wǎng)站建設商城網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉載內(nèi)容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

成都seo排名網(wǎng)站優(yōu)化