在C#中保存图像
本文关键字:图像 保存 | 更新日期: 2023-09-27 18:21:56
我有一段代码应该保存一张图片(位图),但它没有保存,每次都会抛出异常,这是怎么回事?
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+中发生了一个通用错误"。
尝试更改加载图像的方式
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();
请注意,这可能与您的问题无关,但最好避免在系统驱动器的根目录中写入。通常,此位置需要提升访问权限。
尝试将其保存到文件夹中,而不仅仅是C:。否则,我认为您需要使用管理员权限运行。