GDI+你应该不会陌生吧,然而,在VFP里要使用这一技术,可不是一件容易的事,你得学习一大堆API函数。或许,一想到这,你已经望而却步了。不过,从现在起,这一技术不再是豪门旺族的专宠了,我们每一位Foxer都可以让它成为我们得心应手的好工具了。下面就跟我一起来领略它的风采吧。
VFP在9.0的版本里,有个叫_GDIplus的类,它位于VFP的安装目录下:Home(1) + “FFC\_GDIplus.vcx”,是的,这是API函数的封装类,既然已经是封装的类了,那么,我们就不用关心底层的API了,所心,我们完全可以像用普通的VFP类一样,就这么方便:
这个类里有很多成员,但我们不必奢望太多,只须一部分,一部分就足够了。
VFP9的GDI+类库:_gdiplua.vcx


有一个流程我们必须要搞清楚:倘若我们想手工画一幅画的话,首先得确定这幅的大小吧,这个大小我们可以用pgBitmap对象来设定,如果你是想在一幅已有的画上锦上添花的话,那就用gpImage对象,注意,这仅仅是一个预步骤,确定绘图尺寸。好,现在尺寸有了,那就跟据这个尺寸来弄张纸吧,要不然我们往哪儿画呢。
说曹操曹操到,Gpgraphics对象就可以为你弄一张你想要的画布,大小跟你想像的一样。接下来的工作就是画笔和颜料了,按顺序,先确定你的颜料吧,gpColor对象可以为你生成你想要的颜料,且不用但心颜料量的问题。颜料问题我为你解决了,还有笔的问题,商店里有两种笔,不知你要哪种,一种是画轮廓的笔,gpPen,就是画线条的笔,另一种是实心笔,gpsolidbrush,用来写字和填充再适合不过了。好了,万事具备,只欠东风了,开始画吧。不过,好像你还是不会,我得教你一些本领,必竟这是VFP绘图,还记得前面为我们创建画布的东东吧,它能教我们很多绘图本领,比如画直线,画椭圆,画矩形,写文字,画贝兹曲线等等等等,呵呵,一口气我说不完。那么我也有点渴了,请允许我润一下嗓子……………….
好了,我们来成就我们的第一幅作品吧,并将它保存为图片文件,你觉得我的建议怎么样:
用表单设计器准备一个表单,大小嘛500*500好了,我们就在这个表单上画绘吧

Set ClassLib To Home(1) + "FFC\_gdiplus.vcx"
loColorA = CreateObject("gpColor",255,0,0,255) &&红色:颜色值为红,绿,蓝,透明度(0为透明,255为不透明)
loColorB = CreateObject("gpColor",50,50,50,255) &&深灰色:颜色值为红,绿,蓝,透明度(0为透明,255为不透明)
loPen = CreateObject("gpPen",loColorB,2) &&用前句创建的画笔颜色,画笔宽度为2个像素,可自行更改。
loSolidBrush = CreateObject("gpSolidbrush",loColorA) &&创建实体画笔,就要用于写文字和填充。
lopoint = CreateObject("gpPoint",50,50) &&创建点对象
loRectangle = CreateObject("gprectangle",50,50,300,300) &&创建矩形对象
loGraphics = CreateObject("gpGraphics") &&创建画布对象
loGraphics.CreateFromHwnd(Thisform.HWnd) &&将本画布对象设定为表单大小,这是固定写法。后面我会讲自定义画布大小
loColorA.Set(255,0,0,255)
loSolidBrush.Create(locolorA)
lographics.FillPie(loSolidBrush,loRectangle,45,90) &&绘制实心扇形图。下同

loColorA.Set(0,255,0,255)
loSolidBrush.Create(locolorA)
lographics.FillPie(loSolidBrush,loRectangle,135,90)

loColorA.Set(0,0,255,255)
loSolidBrush.Create(locolorA)
lographics.FillPie(loSolidBrush,loRectangle,225,90)

loColorA.Set(110,16,172,255)
loSolidBrush.Create(locolorA)
lographics.FillPie(loSolidBrush,loRectangle,315,90)

loGraphics.Drawrectangle(loPen,50,50,300,300) &&绘制矩形
loGraphics.DrawLine(loPen,50,50,350,350) &&绘制直线
loGraphics.Drawline(loPen,350,50,50,350)
lographics.DrawEllipse(lopen,50,50,300,300) &&绘制椭圆

以上程序段你可以放在表单的Pait()事件里,当然也可以放在其它的Click事件里。
运行,看看效果吧。不过我们要将它保存为图片,这里我们得做必要的修改。如下:
不过这次我是把代码写在了表单的Activate事件里了:

Set ClassLib To Home(1) + "FFC\_gdiplus.vcx"
Thisform.AddObject("ShowDrawing","Image")
loColorA = CreateObject("gpColor",255,255,255,255) &&红色:颜色值为红,绿,蓝,透明度(0为透明,255为不透明)
loColorB = CreateObject("gpColor",50,50,50,255) &&深灰色:颜色值为红,绿,蓝,透明度(0为透明,255为不透明)

lobitmap = CreateObject("gpBitmap",Thisform.Width,Thisform.Height)

loPen = CreateObject("gpPen",loColorA,2) &&用前句创建的画笔颜色,画笔宽度为2个像素,可自行更改。
loBrush = CreateObject("gpSolidbrush",loColorA)

loSolidBrush = CreateObject("gpSolidbrush",loColorA) &&创建实体画笔,就要用于写文字和填充。
lopoint = CreateObject("gpPoint",50,50) &&创建点对象
loRectangle = CreateObject("gprectangle",50,50,300,300) &&创建矩形对象
loGraphics = CreateObject("gpGraphics") &&创建画布对象

*loGraphics.CreateFromHwnd(Thisform.HWnd) &&将本画布对象设定为表单大小,这是固定写法。后面我会讲自定义画布大小
loGraphics.CreateFromImage(lobitmap)
loGraphics.fillRectangle(loBrush,0,0,Thisform.Width,Thisform.Height)

loColorA.Set(255,0,0,255)
loSolidBrush.Create(locolorA)
lographics.FillPie(loSolidBrush,loRectangle,45,90) &&绘制实心扇形图。下同

loColorA.Set(0,255,0,255)
loSolidBrush.Create(locolorA)
lographics.FillPie(loSolidBrush,loRectangle,135,90)

loColorA.Set(0,0,255,255)
loSolidBrush.Create(locolorA)
lographics.FillPie(loSolidBrush,loRectangle,225,90)

loColorA.Set(110,16,172,255)
loSolidBrush.Create(locolorA)
lographics.FillPie(loSolidBrush,loRectangle,315,90)

loGraphics.Drawrectangle(loPen,50,50,300,300) &&绘制矩形
loGraphics.DrawLine(loPen,50,50,350,350) &&绘制直线
loGraphics.Drawline(loPen,350,50,50,350)
lographics.DrawEllipse(lopen,50,50,300,300) &&绘制椭圆

lSuccess = loBitmap.Savetofile("D:\test.jpg", "image/jpeg", "quality=100" )

If lSuccess
   Thisform.ShowDrawing.Picture = "D:\test.jpg"
   Thisform.ShowDrawing.left = 0
   Thisform.ShowDrawing.Top = 0
   Thisform.ShowDrawing.Visible = .T.
   Wait Window "图片已经保存到:D:\test.jpg" NoWait
Else
   MessageBox("图片保存失败")
EndIf

VFP9.0的GDI+类的使用的更多相关文章

  1. 关于VFP9.0备注字段(memo)插入编辑问题

    最近在做项目 用VFP9.0这个比较古老的数据库,有个问题一直纠结我很久.就是memo这个备注字段,你在insert 的时候只要插入的字符串数据超过64K的时候就会出错. 之后我一直在找原因原来是备注 ...

  2. 创建一个接口Shape,其中有抽象方法area,类Circle 、Rectangle实现area方法计算其面积并返回。又有Star实现Shape的area方法,其返回值是0,Star类另有一返回值boolean型方法isStar;在main方法里创建一个Vector,根据随机数的不同向其中加入Shape的不同子类对象(如是1,生成Circle对象;如是2,生成Rectangle对象;如是3,生成S

    题目补充: 创建一个接口Shape,其中有抽象方法area,类Circle .Rectangle实现area方法计算其面积并返回. 又有Star实现Shape的area方法,其返回值是0,Star类另 ...

  3. Uiautomator 2.0之BySelector类学习小记

    1. BySelector与By静态类 1.1 BySelector类为指定搜索条件进行匹配UI元素, 通过UiDevice.findObject(BySelector)方式进行使用. 1.2 By类 ...

  4. ActionScript 3.0 自写类整理笔记(十三)——Random类

    一个简单的随机函数工具类,总共提供了9种静态方法来获取不同的随机值随便写的,如果你还有什么更好的建议,请提出来,谢谢~ index.Random类:代码:public final class Rand ...

  5. As3.0 Interface 与类的使用

    来源:http://blog.sina.com.cn/s/blog_4d65c19e0100bfkb.html 抽象类:又叫抽象基类:可以包含一般类所包含的所有特性,例如,字段,属性,方法,抽象类不能 ...

  6. cocos2dx3.0导出自定义类到lua的方法详细步骤

    我写了一个用3.0的工具导出类到lua,自动生成代码的方法. 以前要导出c++类到lua,就得手动维护pkg文件,那简直就是噩梦,3.0以后就会感觉生活很轻松了. 下面我就在说下具体做法.1.安装必要 ...

  7. guava-19.0和google-collections-1.0 的 ImmutableSet 类冲突

    guava-19.0 google-collections-1.0 都有 ImmutableSet 类,包路径也一致,前者有 copyOf(Collection)? 一.应用报错: 二.解决办法 co ...

  8. [ActionScript 3.0] 运用Color类interpolateColor静态方法绘制渐变色

    以下类可直接作为文档类测试,效果如图: package { import fl.motion.Color; import flash.display.GradientType; import flas ...

  9. poi报表导出4.1.0版本工具类 导出并下载

    这一段时间,由于项目上线基于稳定,所以我这边在基于我们一期迭代的分支上优化一部分我们之前没有做的功能,报表导出.本身之前用的是3.5的版本,但是由于同事要写导入,写的代码只有4.1.0的版本支持,所以 ...

随机推荐

  1. 从头学pytorch(二十):残差网络resnet

    残差网络ResNet resnet是何凯明大神在2015年提出的.并且获得了当年的ImageNet比赛的冠军. 残差网络具有里程碑的意义,为以后的网络设计提出了一个新的思路. googlenet的思路 ...

  2. Kafka日志压缩剖析

    1.概述 最近有些同学在学习Kafka时,问到Kafka的日志压缩(Log Compaction)问题,对于Kafka的日志压缩有些疑惑,今天笔者就为大家来剖析一下Kafka的日志压缩的相关内容. 2 ...

  3. C# html生成图片保存下载

    最近有个需求,需要把内容生成图片,我找到一些资料可以将html页面生成图片并保存下载 下面是简单的实现 1.html页面 @{ Layout = null; } <!DOCTYPE html&g ...

  4. 临近年关,修复ASPNETCore因浏览器内核版本引发的单点登陆故障

    临近年关,咨询师提出360,搜狗急速浏览器无法单点登陆到公司核心产品WD, 报重定向过多. 现象 经过测试, 出现单点登陆故障的是搜狗,360等主打双核(默认Chrome内核)的浏览器, 较新式的Ed ...

  5. SpringMvc简单使用

    SpringMvc框架的简单使用 第一步:导入依赖 <dependencies> <dependency> <groupId>org.springframework ...

  6. django cms 5月第一弹

    官方文档: ##http://django-cms.readthedocs.io/en/latest/index.html #截图 #生存的项目结构

  7. 第一章001-003课程介绍、计算机网络概述、Internet概述

    计算机网络概述 课程安排: 第一章:概述 第二章:物理层 第三章:数据链路层 第四章:网络层 第五章:运输层 第六章:应用层 第七章:网络安全 第八章:因特网上的音频/视频服务 第九章:无线网络 第十 ...

  8. Mysql梳理-关于索引/引擎与锁

    前言 最近突发新型肺炎,本来只有七天的春节假期也因为各种封锁延长到了正月十五,在家实在闲的蛋疼便重新研究了一下Mysql数据库的相关知识,特此总结梳理一下.本文主要围绕以下几点进行: 1.Mysql的 ...

  9. [校内训练20_01_20]ABC

    1.问有多少个大小为N的无标号无根树,直径恰好为L.$N,L \leq 200$ 2.问一个竞赛图中有多少个长度为3.4.5的环.$N \leq 2000$ 3.给出一些直线和单个点A,问这些直线的交 ...

  10. android开发实战-记账本APP(二)

    继昨天的开发,继续完成今天的内容. (一)开始构建一些业务逻辑,开始构建记账本的添加一笔记账的功能. ①对fab按钮的click时间进行修改,创建一个AlertDialog.Builder对象,因此我 ...