c#中將bitmap或者image儲存為清晰的gif

來源:互聯網
上載者:User

在c#中預設可以講bitmap儲存為gif等格式,但是這種儲存方法儲存的gif會嚴重失真

正常情況下的代碼: 

1 System.Drawing.Bitmap b = new System.Drawing.Bitmap(“c:\\original_image.gif“); 
2   System.Drawing.Image thmbnail = b.GetThumbnailImage(100,75,null,new IntPtr());

3   thmbnail.Save(“c:\\thumnail.gif“, System.Drawing.Imaging.ImageFormat.Gif); 

 

今天準備開始寫一個批量處理圖片的軟體,包括各種處理方式,處理效果,但是在儲存為gif的時候出現了問題,在網上查了很久

也沒有發現一個可用的改善gif圖片品質的方法,很多人都在問這個問題,但是很少人回答正確,但是功夫不負有心人,今天晚上

我終於找到了一個解決辦法,儲存出來的gif容量大減,但是效果基本符合常規

這中方法就是就是“Octree“ 演算法。“Octree“ 演算法允許我們插入自己的演算法來量子化我們的映像。 

一個好的“顏色量子化”演算法應該考慮在兩個像素顆粒之間填充與這兩個像素顏色相近的過渡顏色,提供更多可視色彩空間。

Morgan Skinner提供了很好的“Octree“ 演算法代碼,大家可以下載參考使用。

  使用OctreeQuantizer很方便:

 1  System.Drawing.Bitmap b = new System.Drawing.Bitmap(“c:\\original_image.gif“); 
 2   System.Drawing.Image thmbnail = b.GetThumbnailImage(100,75,null,new IntPtr());
 3   OctreeQuantizer quantizer = new OctreeQuantizer ( 255 , 8 ) ;
 4   using ( Bitmap quantized = quantizer.Quantize ( thmbnail ) )
 5   {
 6    quantized.Save(“c:\\thumnail.gif“, System.Drawing.Imaging.ImageFormat.Gif);
 7   }
 8   OctreeQuantizer grayquantizer = new GrayscaleQuantizer ( ) ;
 9   using ( Bitmap quantized = grayquantizer.Quantize ( thmbnail ) )
10   {
11    quantized.Save(“c:\\thumnail.gif“, System.Drawing.Imaging.ImageFormat.Gif);

12   } 

 你可以點擊這裡下載類的檔案(專案檔),根據我的試用,只需要兩個類檔案(OctreeQuantizer.cs,Quantizer.cs)即可運行,將這兩個類檔案的namespace改成

你項目的名稱就行,還有,需要在不安全編譯的方式下編譯,右擊項目名稱,在產生選項卡裡選擇"允許不安全的程式碼"即可

 

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.