C#图片保存问题

想在一个PictureBox中读取图片后再进行绘画操作,最后将这副图连带刚才的绘画一起保存下来,但是在保存会报错,我该怎么写?代码如下:privatevoidOpen_C... 想在一个PictureBox中读取图片后再进行绘画操作,最后将这副图连带刚才的绘画一起保存下来,但是在保存会报错,我该怎么写?
代码如下:
private void Open_Click(object sender, EventArgs e)
{
OpenFileDialog openFileDialog1 = new OpenFileDialog();
pictureBox1.Image = new Bitmap(openFileDialog1.FileName);
}
private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
{
StartPoint.X = e.X;
StartPoint.Y = e.Y;
}
private void pictureBox1_MouseUp(object sender, MouseEventArgs e)
{
CurrentPoint.X = e.X;
CurrentPoint.Y = e.Y;
Point p = new Point(e.X, e.Y);
Graphics g = this.pictureBox1.CreateGraphics();
g.DrawEllipse(new Pen(CurrentColor, 2), StartPoint.X, StartPoint.Y, e.X - StartPoint.X, e.Y - StartPoint.Y);
}
private void Save_Click(object sender, EventArgs e)
{
SaveFileDialog saveFileDialog1 = new SaveFileDialog();
saveFileDialog1.InitialDirectory = "D:\\";
saveFileDialog1.Filter = "*.jpg,*.jpeg,*.bmp,*.gif,*.ico,*.png,*.tif,*.wmf|*.jpg;*.jpeg;*.bmp;*.gif;*.ico;*.png;*.tif;*.wmf";
saveFileDialog1.Title = "保存图像";
saveFileDialog1.ShowDialog();
if (saveFileDialog1.FileName != "")
{
string temp = saveFileDialog1.FileName;
pictureBox1.Image.Save(temp);
//这里出错,我该怎么写使其可以达到保存
}
}
如三楼所说,的确pictureBox1.Image为空了.
那我该如何把上面读取的图片,以及上面的Graphics转化成pictureBox1.Image使其可以保存呢?

将private void pictureBox1_MouseUp(object sender, MouseEventArgs e)中的Graphics g = this.pictureBox1.CreateGraphics();换成Graphics g = Graphics.FromImage((Image)bmp);就没有问题了
bmp是新定义的Bitmap,但是这样编译后读出来的图在鼠标点下去后会消失
展开
 我来答
xbc0010249
推荐于2016-11-27 · TA获得超过249个赞
知道小有建树答主
回答量:263
采纳率:0%
帮助的人:102万
展开全部
private void Save_Click(object sender, EventArgs e)
{
SaveFileDialog saveFileDialog1 = new SaveFileDialog();
saveFileDialog1.InitialDirectory = "D:\\";
saveFileDialog1.Filter = "*.jpg,*.jpeg,*.bmp,*.gif,*.ico,*.png,*.tif,*.wmf|*.jpg;*.jpeg;*.bmp;*.gif;*.ico;*.png;*.tif;*.wmf";
saveFileDialog1.Title = "保存图像";
saveFileDialog1.ShowDialog();
if (saveFileDialog1.FileName != "")
{
string temp = saveFileDialog1.FileName;
pictureBox1.Image.Save(temp);
//这里出错,我该怎么写使其可以达到保存
}
}
这个测试了没有问题

如果只是这句错的话pictureBox1.Image.Save(temp);
那么可能是pictureBox1.Image是为空的

补充:
private void Open_Click(object sender, EventArgs e)
{
OpenFileDialog openFileDialog1 = new OpenFileDialog();
pictureBox1.Image = new Bitmap(openFileDialog1.FileName);
}
这个事件应该写的有问题,只要pictureBox1有东西应该就没问题呀
比如之前加个openFileDialog1.ShowDialog();我测试过了可以的

Graphics g = Graphics.FromImage((Image)bmp);
bmp 已经与pictureBox1没有关系了,pictureBox1还显示什么
创作者kzosjjmFhk
2019-10-19 · TA获得超过3769个赞
知道大有可为答主
回答量:3118
采纳率:35%
帮助的人:213万
展开全部
没分,晕倒。加分的话,我再跟你说。不然太没意思了。
你的B/S结构的,还是C/S的。
B/S可以直接用上传控件实现。
C/S更简单。
我给一个代码给你。
System.Windows.Forms.OpenFileDialog
ofdg=new
OpenFileDialog();
ofdg.Filter="Image
Files(*.bmp;*.jpg;*.gif)|*.bmp;*.jpg;*.gif";
ofdg.ShowDialog();
if(ofdg.ShowDialog()
==
DialogResult.OK)
{
Stream
stream=ofdg.OpenFile();
int
length=(int)stream.Length;
buff=new
byte[length];
stream.Read(buff,0,length);
this.photo.Image=new
Bitmap(stream);
}
以上代码放在System.Windows.Forms.PictureBox这个控件的Click事件里。
这个控件可以实现选择图片的效果,代码中是把图片读成比特流的格式,然后插入数据中。
其实是一样的,那你就把图片写到盘里面去咯,不过大多C/S程序最好不要写在本地盘里,而是写到服务器盘上,这样用户删掉了就没有了。呵呵。
如果是B/S的写到服务器上是可以的。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友52c2bed
2010-04-25 · TA获得超过1156个赞
知道小有建树答主
回答量:761
采纳率:0%
帮助的人:1063万
展开全部
晕,你Save的路径就是你saveFileDialog读取的路径,

就是说你要把文件存在同一个地方,当然要出错了

你要在save里面写上你要保存的路径

比如Save(@“E:\”+saveFileDialog1.FileName);
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
syht2000
高粉答主

2010-04-25 · 关注我不会让你失望
知道大有可为答主
回答量:3万
采纳率:79%
帮助的人:1.5亿
展开全部
这个不太熟,你将pictureBox1.Image.Save(temp)后面的temp先改成固定文件名,比如"c:\\sample.bmp"试试看行不行,如果可以的话,temp中的\是不是要先替换成\\
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
kila_z
2010-04-25 · TA获得超过138个赞
知道答主
回答量:104
采纳率:0%
帮助的人:102万
展开全部
你要给他一个文件名filename单单只是路径而已
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式