總結一下圖片相關,常用的幾個操作 1. 手頭上有一些圖片文件,希望轉換成 c# 中 Image對象,然後加以使用。 public static System.Drawing.Image FromFile (string filename); 舉個例子,建立一個winform工程,設置一下窗體的背景圖 ...
總結一下圖片相關,常用的幾個操作
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; } }
運行效果:
2. 圖片存儲
1. Image對象保存成byte數組,進而存儲在文件或者資料庫里。
using (var memoryStream = new MemoryStream()) { var image = Image.FromFile("Image.png"); image.Save(memoryStream, ImageFormat.Png); var byteArr = memoryStream.ToArray(); }
2. 從文件或資料庫里讀出來的數據,也可以再轉換成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個位元組後不相同。