看板 C_Sharp 關於我們 聯絡資訊
※ [本文轉錄自 C_and_CPP 看板 #1L4wqcPN ] 作者: sky391 (sky) 看板: C_and_CPP 標題: [問題] C# 存picture box問題 時間: Thu Mar 26 14:54:28 2015 開發平台(Platform): (Ex: VC++, GCC, Linux, ...) VC++ 問題: 目前讀圖進來然後做了影像處理顯示在picture box 然後把picture box儲存 結果存的圖還是原本讀圖的那張,第一次使用C# 不知道是否存錯? Code 貼上影像處理到存圖部分 private void button2_Click_1(object sender, EventArgs e) { Bitmap b = pictureBox1.Image as Bitmap; if (b == null) { MessageBox.Show("請載入圖片", "error"); // if user don't load file will return return; } int width = b.Width; int height = b.Height; BitmapData bd = b.LockBits(new Rectangle(0, 0, width, height), ImageLockMode.ReadOnly, PixelFormat.Format24bppRgb); IntPtr imgPtr = bd.Scan0; int stride = bd.Stride; int widthByte = width * 3; int skipByte = stride - widthByte; int[, ,] rgbData = new int[width, height, 3]; double[] Blend_value = new double[50] { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; double s, sum = 1; double s_state = 1; int blend_width = 50; s = (double)1 / blend_width; //----------------- for (int counter = 1; counter < blend_width;counter++ ) { if (counter < blend_width * 0.5) { s_state = s_state - s; sum = 0.5 * System.Math.Pow(2*(1 - s_state), 1.2); Blend_value[counter] = sum; } else { s_state = s_state - s; ; sum =1- (0.5 * System.Math.Pow(2 * s_state, 1.2)); Blend_value[counter] = sum; } } //----------------- #region 讀取 RGB 資料 unsafe { byte* p = (byte*)(void*)imgPtr; for (int j = 0; j < height; j++) { for (int i = 0; i < width; i++) { rgbData[i, j, 2] = p[0]; p++; rgbData[i, j, 0] = p[0]; p++; rgbData[i, j, 1] = p[0]; p++; } p += skipByte; } } #endregion #region 影像處理 unsafe { imgPtr = bd.Scan0; byte* p = (byte*)(void*)imgPtr; for (int j = 0; j < height; j++) { for (int i = 0; i < width; i++) { double r = rgbData[i, j, 0] * Blend_value[i]; double g = rgbData[i, j, 1] * Blend_value[i]; double gg = rgbData[i, j, 2] * Blend_value[i]; p[0] = (byte)g; p++; p[0] = (byte)r; p++; p[0] = (byte)gg; p++; } p += skipByte; } } #endregion b.UnlockBits(bd); Refresh(); } private void button3_Click(object sender, EventArgs e) { Bitmap DrawArea; DrawArea = new Bitmap(pictureBox1.Size.Width, pictureBox1.Size.Height); Graphics g; g = Graphics.FromImage(DrawArea); SaveFileDialog saveFileDialog1 = new SaveFileDialog(); saveFileDialog1.Filter = "Bitmap Image|*.bmp"; saveFileDialog1.Title = "Save an Image File"; saveFileDialog1.ShowDialog(); if (saveFileDialog1.FileName != "") { System.IO.FileStream fs = (System.IO.FileStream)saveFileDialog1.OpenFile(); pictureBox1.Image.Save(Application.ExecutablePath + "11111.bmp"); switch (saveFileDialog1.FilterIndex) { case 1: this.pictureBox1.Image.Save(fs, System.Drawing.Imaging.ImageFormat.Bmp); break; } fs.Close(); } } -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.120.32.173 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1427352870.A.657.html
james732: 問錯板了,請洽 C_Sharp 03/26 16:42
Killercat: 左轉樓下C_Sharp 03/26 16:44
※ 發信站: 批踢踢實業坊(ptt.cc) ※ 轉錄者: sky391 (125.231.58.247), 03/26/2015 17:59:29
GoalBased: 整片code也不整理就貼上來.. 03/26 18:38
feeya: pictureBox.image = (Bitmap) bmp; // 用法是這樣 03/26 21:55
sky391: 謝謝各位 已解決 03/27 01:11