C#byte數(shù)組與Image的相互轉(zhuǎn)換實(shí)例代碼
C#byte數(shù)組與Image的相互轉(zhuǎn)換實(shí)例代碼
功能需求:
1、把一張圖片(png bmp jpeg bmp gif)轉(zhuǎn)換為byte數(shù)組存放到數(shù)據(jù)庫。
2、把從數(shù)據(jù)庫讀取的byte數(shù)組轉(zhuǎn)換為Image對(duì)象,賦值給相應(yīng)的控件顯示。
3、從圖片byte數(shù)組得到對(duì)應(yīng)圖片的格式,生成一張圖片保存到磁盤上。
這里的Image是System.Drawing.Image。
  //Get an image from file
    Image image = Image.FromFile("D:\\test.jpg");
    Bitmap bitmap = new Bitmap("D:\\test.jpg");
以下三個(gè)函數(shù)分別實(shí)現(xiàn)了上述三個(gè)需求:
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Drawing.Imaging;
using System.IO;
using System.Linq;
using System.Text;
namespace NetUtilityLib
{
  public static class ImageHelper
  {
    /// <summary>
    /// Convert Image to Byte[]
    /// </summary>
    /// <param name="image"></param>
    /// <returns></returns>
    public static byte[] ImageToBytes(Image image)
    {
      ImageFormat format = image.RawFormat;
      using (MemoryStream ms = new MemoryStream())
      {
        if (format.Equals(ImageFormat.Jpeg))
        {
          image.Save(ms, ImageFormat.Jpeg);
        }
        else if (format.Equals(ImageFormat.Png))
        {
          image.Save(ms, ImageFormat.Png);
        }
        else if (format.Equals(ImageFormat.Bmp))
        {
          image.Save(ms, ImageFormat.Bmp);
        }
        else if (format.Equals(ImageFormat.Gif))
        {
          image.Save(ms, ImageFormat.Gif);
        }
        else if (format.Equals(ImageFormat.Icon))
        {
          image.Save(ms, ImageFormat.Icon);
        }
        byte[] buffer = new byte[ms.Length];
        //Image.Save()會(huì)改變MemoryStream的Position,需要重新Seek到Begin
        ms.Seek(0, SeekOrigin.Begin);
        ms.Read(buffer, 0, buffer.Length);
        return buffer;
      }
    }
    /// <summary>
    /// Convert Byte[] to Image
    /// </summary>
    /// <param name="buffer"></param>
    /// <returns></returns>
    public static Image BytesToImage(byte[] buffer)
    {
      MemoryStream ms = new MemoryStream(buffer);
      Image image = System.Drawing.Image.FromStream(ms);
      return image;
    }
    /// <summary>
    /// Convert Byte[] to a picture and Store it in file
    /// </summary>
    /// <param name="fileName"></param>
    /// <param name="buffer"></param>
    /// <returns></returns>
    public static string CreateImageFromBytes(string fileName, byte[] buffer)
    {
      string file = fileName;
      Image image = BytesToImage(buffer);
      ImageFormat format = image.RawFormat;
      if (format.Equals(ImageFormat.Jpeg))
      {
        file += ".jpeg";
      }
      else if (format.Equals(ImageFormat.Png))
      {
        file += ".png";
      }
      else if (format.Equals(ImageFormat.Bmp))
      {
        file += ".bmp";
      }
      else if (format.Equals(ImageFormat.Gif))
      {
        file += ".gif";
      }
      else if (format.Equals(ImageFormat.Icon))
      {
        file += ".icon";
      }
      System.IO.FileInfo info = new System.IO.FileInfo(file);
      System.IO.Directory.CreateDirectory(info.Directory.FullName);
      File.WriteAllBytes(file, buffer);
      return file;
    }
  }
}
感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!
欄 目:C#教程
下一篇:C#中的Internal關(guān)鍵字小結(jié)
本文標(biāo)題:C#byte數(shù)組與Image的相互轉(zhuǎn)換實(shí)例代碼
本文地址:http://www.jygsgssxh.com/a1/C_jiaocheng/5752.html
您可能感興趣的文章
- 01-10C#通過重寫Panel改變邊框顏色與寬度的方法
 - 01-10C#實(shí)現(xiàn)實(shí)體類與字符串互相轉(zhuǎn)換的方法
 - 01-10C#實(shí)現(xiàn)子窗體與父窗體通信方法實(shí)例總結(jié)
 - 01-10時(shí)間戳與時(shí)間相互轉(zhuǎn)換(php .net精確到毫秒)
 - 01-10基于C#實(shí)現(xiàn)簡單離線注冊(cè)碼生成與驗(yàn)證
 - 01-10C#二維數(shù)組基本用法實(shí)例
 - 01-10C#開發(fā)中的垃圾回收機(jī)制簡析
 - 01-10C#編程實(shí)現(xiàn)對(duì)象與JSON串互相轉(zhuǎn)換實(shí)例分析
 - 01-10C#多線程編程之使用ReaderWriterLock類實(shí)現(xiàn)多用戶讀與單用戶寫同步
 - 01-10輕松學(xué)習(xí)C#的裝箱與拆箱
 


閱讀排行
本欄相關(guān)
- 01-10C#通過反射獲取當(dāng)前工程中所有窗體并
 - 01-10關(guān)于ASP網(wǎng)頁無法打開的解決方案
 - 01-10WinForm限制窗體不能移到屏幕外的方法
 - 01-10WinForm繪制圓角的方法
 - 01-10C#實(shí)現(xiàn)txt定位指定行完整實(shí)例
 - 01-10WinForm實(shí)現(xiàn)仿視頻播放器左下角滾動(dòng)新
 - 01-10C#停止線程的方法
 - 01-10C#實(shí)現(xiàn)清空回收站的方法
 - 01-10C#通過重寫Panel改變邊框顏色與寬度的
 - 01-10C#實(shí)現(xiàn)讀取注冊(cè)表監(jiān)控當(dāng)前操作系統(tǒng)已
 
隨機(jī)閱讀
- 08-05織夢(mèng)dedecms什么時(shí)候用欄目交叉功能?
 - 01-10使用C語言求解撲克牌的順子及n個(gè)骰子
 - 01-11Mac OSX 打開原生自帶讀寫NTFS功能(圖文
 - 08-05dedecms(織夢(mèng))副欄目數(shù)量限制代碼修改
 - 01-10SublimeText編譯C開發(fā)環(huán)境設(shè)置
 - 04-02jquery與jsp,用jquery
 - 08-05DEDE織夢(mèng)data目錄下的sessions文件夾有什
 - 01-10C#中split用法實(shí)例總結(jié)
 - 01-11ajax實(shí)現(xiàn)頁面的局部加載
 - 01-10delphi制作wav文件的方法
 


