Fw: [問題] C# 存picture box問題(已解決)

看板C_Sharp (C#)作者 (sky)時間10年前 (2015/03/26 17:59), 編輯推噓0(003)
留言3則, 3人參與, 最新討論串1/1
※ [本文轉錄自 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

03/26 16:42, , 1F
問錯板了,請洽 C_Sharp
03/26 16:42, 1F

03/26 16:44, , 2F
左轉樓下C_Sharp
03/26 16:44, 2F
※ 發信站: 批踢踢實業坊(ptt.cc) ※ 轉錄者: sky391 (125.231.58.247), 03/26/2015 17:59:29

03/26 18:38, , 3F
整片code也不整理就貼上來..
03/26 18:38, 3F

03/26 21:55, , 4F
pictureBox.image = (Bitmap) bmp; // 用法是這樣
03/26 21:55, 4F

03/27 01:11, , 5F
謝謝各位 已解決
03/27 01:11, 5F
文章代碼(AID): #1L4zY28a (C_Sharp)
文章代碼(AID): #1L4zY28a (C_Sharp)