这样的问题50分够不够啊?

wyvernwhite 2002-08-22 03:48:38
加精
怎么样能把用Graphics对象绘制和填充形状的命令存成一个MetaFile(MSDN上只找到C++的示例,而且在VB.NET下面不行,因为Graphics对象的构造函数不接受参数,又不能重载)。
或者有没有什么别的办法把用Graphics画的形状保存成图片文件

(这已经是我在这儿问的第四个问题了,不知道会不会还是没人答 ...)
...全文
36 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
wyvernwhite 2002-08-23
  • 打赏
  • 举报
回复
为什么贴过来的代码换行那么混乱%$#%$^!
不管了,虽然和最初的想法有些出入,不过还是谢谢二位的提示
wyvernwhite 2002-08-23
  • 打赏
  • 举报
回复
我想来想去,问题可能是出在那个Hdc上,所以试了一下就把它避开,结果成功了。现在的代码如下:
Dim ButtonBitmap As Bitmap
Dim ButtonGraphics As Graphics

ButtonBitmap = New Bitmap _
(100,100,Drawing.Imaging.PixelFormat.Format32bppPArgb)

ButtonGraphics.FillPath(ButtonBrush, ButtonPath)
ButtonGraphics.SmoothingMode=Drawing.Drawing2D.SmoothingMode.HighSpeed

ButtonBitmap.Save _("E:\ButtonBitmap.emf",Drawing.Imaging.ImageFormat.Emf)
wyvernwhite 2002-08-22
  • 打赏
  • 举报
回复
你抢得还真快啊,我也首先谢谢你们的帮助(其实翻译到是不必),不过还是有点儿问题,先看一下我的代码(和你的差不多):

Dim G As Graphics= Me.CreateGraphics

Dim GraphicsHDC As IntPtr = G.GetHdc()

Dim ButtonMetaFile As New Drawing.Imaging.Metafile("E:\ButtonMetaFile.emf",GraphicsHDC)

Dim ButtonGraphics as Graphics

ButtonGraphics = Graphics.FromImage(ButtonMetaFile)

G.ReleaseHdc(GraphicsHDC)

ButtonGraphics.DrawPath(ButtonPen, ButtonPath)

但是当运行到声明那个Metafile对象时就出错了,提示是:

“未处理的“System.Runtime.InteropServices.ExternalException”类型的异常出现在 system.drawing.dll 中

其他信息:GDI+ 中发生一般性错误。”

但是图元文件还是被创建了,只不过没办法再运行下去,我写的代码只是Release语句的位置不一样,这该不会有影响吧.

sumtec 2002-08-22
  • 打赏
  • 举报
回复
首先感谢您看Sumtec的贴子。


呵呵!我来翻译一下抢点分数:
我从网页上获得了C#的代码,你可以很容易的转换成VB.NET的,但我没有时间去测试,请您自己试一下。

要创建一个metafile,请使用一个带HDC参数的(IntPtr类型的)构造函数。您可以从Graphics.GetHdc()的调用获得这个IntPtr类型的HDC(作为参数使用)。

可能是类似这样的:
Graphics g = CreateGraphics();
IntPtr hRefDC = g.GetHdc();
Metafile m = new Metafile( textBox1.Text, hRefDC );
g.ReleaseHdc( hRefDC );
Graphics gMeta = Graphics.FromImage( m );
gMeta.DrawLine( Pens.Blue, 0, 0, 1000, 1000 );

----
如有任何问题,请回复本贴。
亨利上


p.s.: 我将C#翻译成VB.NET, 你看能不能用?
Dim g As Graphics = CreateGraphics()
Dim hRefDC As IntPtr = g.GetHdc()
Dim m As Metafile = New Metafile(textBox1.Text, hRefDC)
g.ReleaseHdc(hRefDC)
Dim gMeta As Graphics = Graphics.FromImage(m)
gMeta.DrawLine(Pens.Blue, 0, 0, 1000, 1000)

————————————————————————————————————————
Sumtec宇宙技术中心 VB技术支持
本贴子以“现状”提供且没有任何担保,同时也没有授予任何权利,并保持和微软所提供的条款一致。具体事项可参考微软公司的使用条款(http://support.microsoft.com/directory/worldwide/zh-cn/community/terms_chs.asp)。
(因为比较紧急,没有制作自己的网页,敬请见谅。谢谢使用!)

Latitude 2002-08-22
  • 打赏
  • 举报
回复
I got this from web by c#, you can convert to vb.net easily, but I had no time to test it, pls try it yourself.

To create a metafile for writing, use one of the constructors which takes an HDC as a parameter (IntPtr). You can get the IntPtr from a
Graphics.GetHdc() call.

Maybe like this:
Graphics g = CreateGraphics();
IntPtr hRefDC = g.GetHdc();
Metafile m = new Metafile( textBox1.Text, hRefDC );
g.ReleaseHdc( hRefDC );
Graphics gMeta = Graphics.FromImage( m );
gMeta.DrawLine( Pens.Blue, 0, 0, 1000, 1000 );

----
any questions pls reply this.
by Henry

16,554

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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