2014-09-13 3 views
1

У меня есть код, который должен сохранить изображение (растровое изображение), и он не сохраняет его и каждый раз вызывает исключение, в чем проблема?Сохранить изображение в C#

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.Windows.Forms; 
using System.Drawing.Imaging; 
using System.IO; 

namespace PicConv { 
    public partial class Form1 : Form { 
     Bitmap bmp; 
     Bitmap bmp2; 
     public Form1() { 
      InitializeComponent(); 
     } 

     private void button1_Click(object sender, EventArgs e) { 

      for (int y = 0; y < bmp.Height; y++) { 
       for (int x = 0; x < bmp.Width; x++) { 
        Color c = bmp2.GetPixel(x, y); 
        byte r = c.R; 
        byte g = c.G; 
        byte b = c.B; 

        byte I = (byte)(0.3 * r + 0.59 * g + 0.11 * b); 
        Color c1 = Color.FromArgb(I, I, I); 
        bmp2.SetPixel(x, y, c1); 
       } 
      } 
      pictureBox2.Image = bmp2; 
      pictureBox2.SizeMode = PictureBoxSizeMode.StretchImage; 
     } 

     private void pictureBox1_Click(object sender, EventArgs e) { 
      bmp = new Bitmap(@"C:\pic.bmp"); 
      pictureBox1.Image = bmp; 
      pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage; 
      bmp2 = (Bitmap)bmp.Clone(); 
     } 

     private void button2_Click(object sender, EventArgs e) { 
      try { 
       if (bmp2 != null) { 
        bmp2.Save(@"c:\test.bmp"); // <- this throws an exception every time and won't save anything 
       } 
      } catch (Exception ex) { 
       MessageBox.Show("Error: " + ex.Message); 
      } 
     } 
    } 
} 

Я сделал это всплывающее окно окна сообщения говоря мне, что ошибка и он говорит: «Общая ошибка произошла в GDI +».

+3

Не рекомендуется сохранять в корневом каталоге системного диска. Попробуйте временную папку (C: \ TEMP \ Test.bmp) – Steve

ответ

1

Попробуйте изменить способ, в котором вы загрузить ваш образ

using(FileStream fs = new FileStream(@"C:\temp\pic.bmp", FileMode.Open, FileAccess.Read)) 
{ 
    MemoryStream ms = new MemoryStream(); 
    fs.CopyTo(ms); 
    ms.Seek(0, System.IO.SeekOrigin.Begin); 
    bmp = (Bitmap)System.Drawing.Image.FromStream(ms); 
} 
pictureBox1.Image = bmp; 
pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage; 
bmp2 = (Bitmap)bmp.Clone(); 

Обратите внимание, что это, вероятно, не связаны с вашей проблемой, но лучше избегать написания в корне системного диска. Обычно для этого места требуются повышенные разрешения доступа.

+0

Спасибо, человек, работал как шарм – 2014-09-13 22:23:03

+1

Кроме того, все это было из-за того, что я был в корневой папке. – 2014-09-13 22:24:20

1

Попробуйте сохранить его в папку, а не только C :. В противном случае, я думаю, вам нужно запустить с правами администратора.

Смежные вопросы