Fw: [問題] C# 存picture box問題(已解決)
※ [本文轉錄自 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
03/26 16:42, 1F
→
03/26 16:44, , 2F
03/26 16:44, 2F
※ 發信站: 批踢踢實業坊(ptt.cc)
※ 轉錄者: sky391 (125.231.58.247), 03/26/2015 17:59:29
→
03/26 18:38, , 3F
03/26 18:38, 3F
→
03/26 21:55, , 4F
03/26 21:55, 4F
→
03/27 01:11, , 5F
03/27 01:11, 5F
C_Sharp 近期熱門文章
PTT數位生活區 即時熱門文章