c#圖片相關常用的方法及處理


總結一下圖片相關,常用的幾個操作
 
一 創建Image對象

1. 手頭上有一些圖片文件,希望轉換成 c# 中 Image對象,然后加以使用。

public static System.Drawing.Image FromFile (string filename);

舉個例子,建立一個winform工程,設置一下窗體的背景圖片。

  public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();

            Image image = Image.FromFile("Image.png");
            this.BackgroundImage = image;
        }
    }

運行效果:

 

二 圖片存儲與顯示

 

1. Image ---> Byte數組

Image對象保存成byte數組,進而存儲在文件或者數據庫里。

 

       using (var memoryStream = new MemoryStream())
            {
                var image = Image.FromFile("Image.png");
                image.Save(memoryStream, ImageFormat.Png);
                var byteArr = memoryStream.ToArray();
            }

 

2. Byte數組 ---> Image

從文件或數據庫里讀出來的數據,也可以再轉換成Image對象。

 

var image1 = new ImageConverter().ConvertFrom(byteArr);
this.BackgroundImage = (Image)image1;

 直接讀取圖片文件存儲的二進制數據也可以轉換成Image對象。

 

var originByte = File.ReadAllBytes("Image.png");
var image1 = new ImageConverter().ConvertFrom(originByte);
this.BackgroundImage = (Image)image1;

 

 比較一下兩者的二進制數據,還是有差異的。Image對象的數據量更大一些。但是經過我的測試。

 兩種數據都能被ImageConverter正確解析。

     private void button1_Click(object sender, EventArgs e)
        {
            using (var memoryStream = new MemoryStream())
            {
                var image = Image.FromFile("Image.png");
                image.Save(memoryStream, ImageFormat.Png);
                var byteArr = memoryStream.ToArray();

                var originByte = File.ReadAllBytes("Image.png");
                WriteData("imageObj.txt", byteArr);
                WriteData("originFile.txt", originByte);
            }
        }

        private static void WriteData(string filename, byte[] target)
        {
            var list = new List<string>();
            for (var i = 0; i < target.Length; i++)
            {
                list.Add($"{i}-->{target[i]}");
            }
            File.AppendAllLines(filename, list);
        }

 我換了一張很小的圖片做比較。可以參考一下比較的片段,從第36個字節后不相同。

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM