1. 程式人生 > >對圖片進行X,Y軸的翻轉,黑白色轉變

對圖片進行X,Y軸的翻轉,黑白色轉變

截取 sys logs 高度 基本 ctu 初始 || indexof

做完了修改圖片的程序。用的Winfrom做的。昨天基本完成,記錄一下使用的東西。

首先是將需要加載的圖片放入picturebox控件,這裏用到了openfiledialog 打開文件對話框

    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獲取圖片的對象,然後進行控件賦值或者對圖片對象的修改。

但是這裏實現圖片顏色翻轉的方法,速度很慢,如果圖片清晰度過高,會卡主程序幾秒鐘。

對圖片進行X,Y軸的翻轉,黑白色轉變