【发布时间】:2010-05-21 09:16:04
【问题描述】:
我有两个问题:
1) 我有一个PictureBox,它的 Dock 设置为 Fill。当我调整Form 的大小时,我无法在扩展的PictureBox 部分创建图形。有什么问题?
2) 我想将 PictureBox 上创建的 Graphic 转换为 Bitmap 并将其另存为
*.JPG 或 *.bmp。我该怎么做?
【问题讨论】:
标签: c# .net bitmap picturebox
我有两个问题:
1) 我有一个PictureBox,它的 Dock 设置为 Fill。当我调整Form 的大小时,我无法在扩展的PictureBox 部分创建图形。有什么问题?
2) 我想将 PictureBox 上创建的 Graphic 转换为 Bitmap 并将其另存为
*.JPG 或 *.bmp。我该怎么做?
【问题讨论】:
标签: c# .net bitmap picturebox
您可以使用handle device 将位图从图片框中取出
Graphics g = pictureBox1.CreateGraphics();
Bitmap bitMap = Bitmap.FromHbitmap(g.GetHdc());
bitMap.Save(filePath, System.Drawing.Imaging.ImageFormat.Jpeg);
甚至更好,如果pictureBox不修改图片,可以直接从pictureBox控件中获取图片
pictureBox1.Image.Save("path", System.Drawing.Imaging.ImageFormat.Jpeg);
【讨论】:
试试这个,对我来说很好用...
private void SaveControlImage(Control ctr)
{
try
{
var imagePath = @"C:\Image.png";
Image bmp = new Bitmap(ctr.Width, ctr.Height);
var gg = Graphics.FromImage(bmp);
var rect = ctr.RectangleToScreen(ctr.ClientRectangle);
gg.CopyFromScreen(rect.Location, Point.Empty, ctr.Size);
bmp.Save(imagePath);
Process.Start(imagePath);
}
catch (Exception)
{
//
}
}
【讨论】:
1) 你的描述很模糊。你有例外吗?它是否显示错误的结果?发生了什么?
2) 你需要从 PictureBox 中获取图片并使用它的Save method。
【讨论】:
当 Picturebox 调整大小以填充表单时,它的 Image 属性似乎保持不变。
所以你需要做的是处理 PictureBox.OnSizeChanged 事件,然后使用以下代码调整图片大小:
private void pictureBox1_SizeChanged(object sender, EventArgs e)
{
if ((pictureBox1.Image != null))
{
pictureBox1.Image = new Bitmap(pictureBox1.Image, pictureBox1.Size);
}
}
要保存图像,请使用:
pictureBox1.Image.Save(filename, System.Drawing.Imaging.ImageFormat.Jpeg);
希望有帮助!
【讨论】: