1. 程式人生 > >登錄界面的設計之二

登錄界面的設計之二

文件路徑 express 保留 lose orm 方法 窗體 str 寬度

  老人們常說,實踐出真知,這句話本身應該就是從實踐中總結出來的。


  剛簡單的弄了一下界面,出現了一個問題,然後經過一番糾纏,解決了,現記錄如下:

  • 問題的出現

  大家都知道,一般Form在窗體的左上角是一個圖標,WinForm中,這個圖標必須是ico格式的。可是,現在手裏幾乎沒有ico格式的圖標,而DevExpress中的圖標,基本都是png格式的,所以,這裏就涉及到一個轉換問題。

  本想著去網上下載一個轉換軟件,後來想想,是不是可以自己整一個出來?

  其實嘛,所謂自己整,無非是自己去借鑒其他人的代碼而已,但自己畢竟動手了,其中再加上一點點的思考的話,那麽,效果就有了,正所謂師夷長技以制夷嘛!呵呵,扯遠了又。

  • 摘抄的代碼

這是從網上摘抄的代碼,一些註釋我修改了一下,通過這個方法的調用,就可以實現把png文件轉換為ico文件了。

 1      /// <summary>
 2         ///  PNG文件轉換成ICO文件
 3         /// </summary>
 4         /// <param name="filePth">png文件路徑</param>
 5         /// <returns></returns>
 6         private void ConvertToIcon(string filePath)
7 { 8 Image image = Image.FromFile(filePath); 9 // 方法1:直接使用 10 image.Save(@"D:\直接修改的.ico", ImageFormat.Icon); 11 12 // 方法2: 13 using (MemoryStream msImg = new MemoryStream(), msIco = new MemoryStream()) 14 { 15 //
這裏,相當於把原始的Png文件保存到了流中 16 image.Save(msImg, ImageFormat.Png); 17 18 using (BinaryWriter bw = new BinaryWriter(msIco)) 19 { 20 bw.Write((short)0); // 0-1,保留 21 bw.Write((short)1); // 2-3,文件類型,1=圖標,2=光標 22 bw.Write((short)1); // 4-5,圖像數量 23 bw.Write((byte)image.Width); // 6,圖標寬度 24 bw.Write((byte)image.Height); // 7,圖標高度 25 bw.Write((byte)0); // 8,顏色數,0表示多余8未 26 bw.Write((byte)0); // 9,保留 27 bw.Write((short)0); // 10-11,調色板 28 bw.Write((short)32); // 12-13,位深 29 bw.Write((int)msImg.Length); // 14-17,位圖數據大小 30 bw.Write(22); // 18-21,位圖數據起始字節 31 bw.Write(msImg.ToArray()); 32 bw.Flush(); 33 bw.Seek(0, SeekOrigin.Begin); 34 35 Icon newIcon = new Icon(msIco); 36 string newFilePath = filePath.Replace("png", "ico"); 37 38 FileStream fs = new FileStream(newFilePath,FileMode.Create,FileAccess.Write); 39 40 newIcon.Save(fs); 41 fs.Close(); 42 } 43 } 44 }
  • 兩種方法的差異:

  通過觀察,差異主要在文件頭部,使用第二種方法會比第一種方法多出來代碼中所填寫的那22個字節的數據,而且,第一種方法轉換完的ico圖標顯示的不是太正常,但可以使用一些軟件打開。

  小結:迷迷糊糊用了將近2個小時把這點代碼寫了寫,改了改,當然這中間還設計了一個支持文件拖拽的界面,這些就不貼上了。成就感還是有一點的,因為自己遇到問題,知道自己去找找代碼而不是找找軟件了(當然這如果可以算進步的話)。

登錄界面的設計之二