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


做完了修改圖片的程序。用的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;//返回黑白圖片
        }

將圖片進行X,Y軸的翻轉

 圖片翻轉只需要用到bitmap類的RotateFlip方法

/// <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軸

 

小結:

這兩個功能主要是通過Bitmap獲取圖片的對象,然后進行控件賦值或者對圖片對象的修改。

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

 


免責聲明!

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



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