作完了修改圖片的程序。用的Winfrom作的。昨天基本完成,記錄一下使用的東西。ide
首先是將須要加載的圖片放入picturebox控件,這裏用到了openfiledialog 打開文件對話框this
string fName = string.Empty;//文件名稱
1 if (openFileDialog1.ShowDialog() == DialogResult.OK) 2 { 3 fName = openFileDialog1.FileName;//記錄須要加載的文件的路徑 4 string picName = Path.GetFileName(fName);//根據路徑,經過system.IO.Path獲取路徑中的文件名和擴展名 5 if (picName.Contains(".png") || picName.Contains(".jpg")) 6 { 7 Bitmap pic = new Bitmap(fName);//根據路徑獲取圖片對象 8 this.pictureBox1.Image = pic;//將圖片載入控件 9 bitlist.Add(new Bitmap(this.pictureBox1.Image));//這裏是一個撤回的功能,將全部操做最後的結果圖放入一個泛型集合
10 Xsfbl = scale("X"); 11 Ysfbl = scale("Y");//由於圖片加載進來是按照控件大小自動改變,因此要計算一下XY座標的比例 12 //若是圖片名稱寫到備註
13 try
14 {//這裏作了一個備註功能,保存的時候將備註做爲文件名保存,加載的時候再將文件名記入備註用控件。 15 string lpath = fName.Substring(fName.LastIndexOf("\\") + 1);//這裏 .LastIndexOf("\\")是截取\\符號在fName中的最後一位索引 16 string path = lpath.Substring(0,lpath.LastIndexOf(".")); 17 string[] str = path.Split(','); 18 for (int i = 0; i < dataGridView1.Rows[0].Cells.Count; i++) 19 { 20 dataGridView1.Rows[0].Cells[i].Value = str[i + 1]; 21 } 22 } 23 catch
24 { 25
26 }
/// <summary>
/// 獲取圖片縮放比例 /// </summary>
/// <returns>計算X軸仍是Y軸</returns>
private float scale(string XY) { Image img = Image.FromFile(fName);//根據路徑獲取圖片
if (pictureBox1.Height > 0) { if (XY == "X") { Xsfbl = (pictureBox1.Width * 1.0f) / img.Width; return Xsfbl; } if (XY == "Y") { Ysfbl = (pictureBox1.Height * 1.0f) / img.Height; return Ysfbl; } } return 0; }
這個功能實現的方式就是經過循環獲得並修改圖片的每個像素的顏色值(Bitmap.GetPixel(x,y)),最後將修改過的圖片return出去。
修改像素時,由於每一個色素的三原色滿值是255,因此用255減去原來的值獲得的就是相仿的顏色。再次執行這個方法能夠將圖片轉回原來的顏色
若是想實現圖片的灰化,能夠取三原色的平均值。
/// <summary>
/// 將圖片轉爲爲黑白圖片 /// </summary>
/// <param name="mybt">要進行處理的圖片</param>
/// <param name="width">圖片的長度</param>
/// <param name="height">圖片的高度</param>
/// <returns>已經被處理後的黑白圖片</returns>
public Bitmap BWPic(Bitmap mybm, int width, int height) { Bitmap bm = new Bitmap(width, height);//初始化一個Bitmap對象,用來記錄處理後的圖片
int x, y, result;//x,y是循環次數,result是記錄處理後的像素值
Color pixel; for (x = 0; x < width; x++) { for (y = 0; y < height; y++) { pixel = mybm.GetPixel(x, y);//獲取當前座標的像素值 //result = (pixel.R + pixel.G + pixel.B) / 3;//取紅綠藍三色的平均值(圖片灰化) //繪圖,把處理後的值賦值到剛纔定義的bm對象裏面
bm.SetPixel(x, y, Color.FromArgb(255 - pixel.R, 255 - pixel.G, 255 - pixel.B));//翻轉三原色
} } return bm;//返回黑白圖片
}
圖片翻轉只須要用到bitmap類的RotateFlip方法spa
/// <summary> /// 旋轉圖片 /// </summary> /// <param name="img"></param> /// <returns></returns> public static Bitmap KiRotate(Bitmap img,string XY) { try { if (XY == "x") { img.RotateFlip(RotateFlipType.Rotate180FlipX); } else { img.RotateFlip(RotateFlipType.Rotate180FlipY); } return img; } catch { return null; } }
第二個參數只爲了判斷此次操做是旋轉X軸仍是Y軸code
這兩個功能主要是經過Bitmap獲取圖片的對象,而後進行控件賦值或者對圖片對象的修改。對象
可是這裏實現圖片顏色翻轉的方法,速度很慢,若是圖片清晰度太高,會卡主程序幾秒鐘。blog