PaintEventArgse函数如何传入?

datour 2010-04-07 10:45:43
以下是从MSDN里拷的一个示例,讲的是Graphics.FromImage 方法,示例代码中FromImageImage(PaintEventArgs e)函数的参数到底该如何传入?我在窗体上添加一个Button,想单击Button时执行下面的代码,绘制一个矢量图,然后保存为矢量图格式。

下面的代码示例设计用于 Windows 窗体,它需要 PaintEventArgse(这是 Paint 事件处理程序的参数)。代码执行下列操作:
从示例文件夹中的图形文件 SampImag.jpg 创建 Image。
从 Image 创建 Graphics。
通过填充图像中的矩形来改变该图像。
将 Image 绘制到屏幕。
释放创建的 Graphics。

public void FromImageImage(PaintEventArgs e)
{

// Create image.
Image imageFile = Image.FromFile("SampImag.jpg");

// Create graphics object for alteration.
Graphics newGraphics = Graphics.FromImage(imageFile);

// Alter image.
newGraphics.FillRectangle(new SolidBrush(Color.Black), 100, 50, 100, 100);

// Draw image to screen.
e.Graphics.DrawImage(imageFile, new PointF(0.0F, 0.0F));

// Dispose of graphics object.
newGraphics.Dispose();
}
...全文
654 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
datour 2010-04-08
  • 打赏
  • 举报
回复
多谢楼上的,问题解决了。内存不足的问题,换成打开位图格式文件,如jpg/gif/bmp/png/ico等就可以了。
KissXYL 2010-04-08
  • 打赏
  • 举报
回复
你代码和图片发来我邮箱看看
simtel_006@126.com
datour 2010-04-08
  • 打赏
  • 举报
回复
回复4楼:
按照您的建议,也调用成功了,可仍旧是警告:内存不足。难道是MSDN给的这个函数代码要修改?如何修改?就是想调用运行这段代码成功。

private void button1_Click(object sender, EventArgs e)
{
//this.Paint += new System.Windows.Forms.PaintEventHandler(FromImageImage);
//FromImageImage(null);
Graphics g = this.CreateGraphics();
PaintEventArgs pe = new PaintEventArgs(g, this.ClientRectangle);
FromImageImage(pe);
g.Dispose();

}

// 内存不足!!!!!?????
private void FromImageImage(PaintEventArgs e)
{
try
{
// Create image.
Image imageFile = Image.FromFile(@"D:\产学研\10 统计图\00 Image\tmp.emf");// 从指定的文件创建 Image。
// Create graphics object for alteration.
Graphics newGraphics = Graphics.FromImage(imageFile);

// Alter image.
newGraphics.FillRectangle(new SolidBrush(Color.Black), 100, 50, 100, 100);

// Draw image to screen.
e.Graphics.DrawImage(imageFile, new PointF(0.0F, 0.0F));

// Dispose of graphics object.
newGraphics.Dispose();
imageFile.Dispose();
}
catch (System.Exception ex)
{
MessageBox.Show(ex.Message);
}
}
KissXYL 2010-04-08
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 xray2005 的回复:]
直接 FromImageImage(null) 调用即可。
[/Quote]

显然不行,你没看到人家有这句么
e.Graphics.DrawImage(imageFile, new PointF(0.0F, 0.0F));

--------------------------------------------------------------

这样做

Graphics g = 对应需要的控件.CreateGraphics();
PaintEventArgs pe = new PaintEventArgs(g, 对应需要的控件.ClientRectangle);
FromImageImage(pe);
g.Dispose();


datour 2010-04-08
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 xray2005 的回复:]
直接 FromImageImage(null) 调用即可。
[/Quote]
按您的方法调用成功了,可是运行FromImageImage函数时,报错,说内存不足,可是tmp.emf只有46k啊,楼上强人能否再指点一下?总不至于MSDN给的这个函数代码有问题吧?小弟初接触c#图形编程,好多不懂呢!
masky5310 2010-04-08
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 xray2005 的回复:]
直接 FromImageImage(null) 调用即可。
[/Quote]

同意。。
xray2005 2010-04-07
  • 打赏
  • 举报
回复
直接 FromImageImage(null) 调用即可。

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧