编写图形软件的一点心得

前段时间做了一个所见即所得的图形软件(可惜代码在公司不能带出来,就不能共享了),期间写了一个小小的总结,贴在这也算个记录吧。

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

图形文件大致分成2种:矢量图,位图。
矢量图的特征是不管怎么放大,图形依然很清晰,因为本质上矢量图记录的是画图的命令序列;位图在放大的时候会变模糊,因为位图是点(象素)的集合。
 
图形编程和一般编程相差较大的就是特别考虑效率,及时释放资源,因为画图占用资源比较大。而且如果是直接画到屏幕上,因为每次刷新都会重画,资源占用大。
 
画图最主要的是得到Graphics对象(GDI+,C#),基本上任何图形对象都可以产生Graphics,可以把它看成是一个画板或者画东西的表面,就像生活中的一面墙,一个桌子等,得到这个表面之后,就可以在这个上面画出你想要的东西了。至于画板或者表面也多大,就要看产生该Graphics的对象的大小或者要设定。整个画图区域在一个二维坐标系下,用Graphics画图的时候可不管能画的区域有多大,它接收的参数包括画的位置,不管这个位置是否真的有意义,它就往上面画。画图本质上就是一些点,线的集合。一般会提供一些标准函数,然后就自己组合这些函数。
 
在画位图的时候,直接创建Graphics,然后在上面画,最后保存就行了(如果是画在屏幕上,就不用保存了,它会直接显示)。但是画矢量图的时候就要稍微复杂一点。因为它本质上是画图命令序列,所以需要先创建一个metaFile,再由这个元文件关联(或者创建)一个Graphics,然后再画图,最后保存。
典型的画位图和矢量图文件的方法如下:
1.位图:
   Bitmap bp = new Bitmap(100,80);  //100,80是设置画图区域的大小,如果不指定文件名,则默认在内存中创建
   Graphics gs = Graphics.FromImage(bp);  //从bp中获得Graphics对象
   DrawImage(gs);  //具体的画图步骤
   bp.Save(fileName,ImageFormat.Bmp);  //保存到文件中,保存的时候按指定格式保存到指定的文件中。ImageFormat是一个枚举的类型。
 
2.矢量图:
   //100,80是设置画图区域的大小(对矢量图来说,这个大小设置没有意义,如果之后都不设定区域大小,那么它会根据图片的实际大小自动调整画出来的图片的大小),在内存中创建
   Bitmap bp = new Bitmap(100,80);  
   Graphics gs = Graphics.FromImage(bp);  //从bp中获得Graphics对象
   Metafile mf  = new Metafile(emfilename,gs.GetHdc(),rect,MetafileFrameUnit.Pixel); //矢量图必须有一个关联的元文件,rect指定画图区域的大小,这个才是真正的控制画图(更确切的说是保存的我们能看到的显示区域),在后面必须跟上区域大小的单位。  
   Graphics g = Graphics.FromImage(mf);  //由元文件关联一个Graphics,这就表明以后用这个Graphics画图就画到metafile里面。 
   DrawImage(g);  //具体的画图步骤
   g.Dispose();    //释放资源,在释放的同时会保存。也可以调用g.Save();
   mf.Dispose();  //释放资源
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值