打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
VFP用GDI+画图写字
*---------------------------- 
* 使用 GDI+ 庫繪圖範例 
* 打開 VCX 文件可以查看類庫源代碼 
*---------------------------- 

*---------------------------- 
* VFP 9.0(SP2) 自帶GDI+類庫 
* 文件名:_GDIplus.vcx, _GDIplus.vct (若使用頭文件,有 GDIplus.h, GDIplus_locs.h) 
* 路徑:VFP 安裝目錄下 FFC 文件夾 
*---------------------------- 
SET PATH TO HOME() + "FFC" 
_Bitmap = NEWOBJECT("gpBitmap", "_GDIplus.vcx")                && 建立繪圖板對象,圖形將在此畫板上繪製 
WITH _Bitmap 
    .Create(128,128)                                        && 設定畫板大小,寬度和高度 
    .SetResolution(300,300)                                    && 設定分辨率(x,y 的 DPI 値) 
ENDWITH 
_Color = NEWOBJECT("gpColor", "_GDIplus.vcx")                && 建立顔色對象 
_Pen = NEWOBJECT("gpPen", "_GDIplus.vcx")                    && 建立畫筆對象 
_Font = NEWOBJECT("gpFont", "_GDIplus.vcx")                    && 建立字體對象 
_StringFormat = NEWOBJECT("gpStringFormat", "_GDIplus.vcx") 
_TextBrush = NEWOBJECT("gpSolidBrush", "_GDIplus.vcx") 
_Point = NEWOBJECT("gpPoint", "_GDIplus.vcx") 
_Graphics = NEWOBJECT("gpGraphics", "_GDIplus.vcx")            && 建立圖形對象 
WITH _Graphics 
    .CreateFromImage(_Bitmap)                                && 指定圖形對象的設備,此處指向已建立的_Bitmap對象 
    _Color.Set(255,255,255)                                    && 設定顔色,三個參數分別是紅、緑、藍値,即RGB各自獨立 
    .Clear(_Color)                                            && 用設定的顔色填充整個圖形,可用於背景顔色 
    _Color.Set(0,0,0)                                        && 改變顔色 
    _Pen.Create(_Color, 10)                                    && 將指定的顔色賦予畫筆,請查看類庫中gpPen對象Create方法的參數,此處10是筆寬 
    .DrawLine(_Pen, 20, 20, 108, 20)                        && 用設定的畫筆畫圖,類庫中有很豐富強大的畫圖函數 
    .DrawLine(_Pen, 20, 50, 108, 50) 
    _Color.Set(0,255,0) 
    _Font.Create("方正综艺_GBK", 10, 0, 3)                            && 設置文本字體 
    _TextBrush.Create(_Color)                                && 設定文本顔色 
    _Point.Create(1, 80)                                    && 設定文本左上角位置 
    .DrawStringW(STRCONV("測試", 5), _Font, _Point, _StringFormat, _TextBrush) 
ENDWITH 
_Bitmap.SaveToFile("Test.bmp", "image/bmp")                    && 將繪圖板保存爲文件,此處指定文件格式爲.BMP 
RELEASE ALL 
RETURN 

如果你不用Project項目,在SET PATH後加一行:SET CLASSLIB TO _GDIplus


使用Windows中文字库的时候,最好使用所示那样的带W的函数,要用strconv()转换为Unicode编码,函数的参数是5。


文字竖向是这样:
#INCLUDE "GDIplus.h"
_StringFormat = NEWOBJECT("gpStringFormat", "_GDIplus.vcx")
_StringFormat.Create(GDIPLUS_STRINGFORMATFLAGS_DirectionVertical)



VFP GDIPlus.vcx封装的是Windows系统自带的GDI+ API类库,全部是调用Windows API函数的,其用法可查相关的API资料,一样的。Windows能做的绘图,在VFP用这个全部都能做。实际上,VFP9开放的API接口功能,给VFP赋予了跟上新系统的生命力。VFP9 SP2最新的报表模块,就是利用这个接口写的。



無需懷疑上面代碼的可行性,因為那是從我正在使用的程序(批量轉換十萬個以上圖片,統一爲指定格式、尺寸、擺放位置、不失眞不變形)中提煉出來的基本用法,調試過的,運行不了一定是你有什麽地方搞錯了。

電子文檔是沒有的,只有張洪舉兩本書上寫的那些,而且有十多頁那麽多,不好弄。不過,幸好VCX類庫是可以編輯查看源代碼的,直接看源代碼勝於看書。_GDIplus.vcx只是GDIplus.DLL的VFP封裝,其實還是調用API函數,在MSDN中有更加詳細的GDI+資料,看那裏就可以了。只要搞明白我上面程序的原理,就知道怎麽套用,到時需要什麽在MSDN上查。

GDI+的基本原理:在虛擬設備上繪圖!Graphics.CreateFrom,當FromImage時指虛擬設備是一個圖像空間(不帶顯示),當FromHWnd時指虛擬設備是一個窗口句柄(帶顯示),這是書上沒有坦白告訴讀者的東西。所以,上面的代碼,實際上就是將建立的_Bitmap對象視為窗體,與平常屏幕繪圖時一樣用法,只要把虛擬設備換回窗體句柄,就是在窗體上繪圖(換成打印機也可以,直接就打出來了),沒什麽奧妙的。但要將圖形存儲爲文檔,就一定必須用Bitmap對象。





DrawStringA 方法
以指定的字体和位置绘制一个串(ANSI 版本)。

语法:THIS.DrawStringA( tcAnsiString, [toFont],tvRectPoint,[toStringFormat],[toBrush])

返回值:逻辑型,表示成功或失败。

参数:

tcAnsiString,必须,要绘制的 ANSI 串。

toFont,可选,指定要使用字体的 gpFont 对象。

tvRectPoint,必须,指定绑定矩形的 gpRect 对象,或指定坐上角的 gpPoint 对象。

toStringFormat,可选,gpStringFormat 对象。

toBrush,可选,绘制文本时要使用的 gpBrush 对象。

DrawStringW 方法
以指定的字体和位置绘制一个串(Unicode 版本)。

语法:THIS.DrawStringW( tcUnicodeString,[toFont],tvRectPoint,[toStringFormat],[toBrush])

返回值:逻辑型,表示成功或失败。

参数:

tcUnicodeString,必须,要绘制的 Unicode 串。

toFont,可选,指定要使用字体的 gpFont 对象。

tvRectPoint,必须,指定绑定矩形的 gpRect 对象,或指定坐上角的 gpPoint 对象。

toStringFormat,可选,gpStringFormat 对象

toBrush,可选,绘制文本时要使用的 gpBrush 对象。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
GDI+ FFC图形类
安装程序时gdiplus.dll出错的解决方法
如何使用GDI或者GDI+的函数对IplImage进行图像处理?
Image Processing using GDI and VC 6.0 - CodeGuru
Windows+GDI和GDI+编程实例剖析
一些关于GDI+的文字——概述
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服