*----------------------------
* 使用 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 对象。
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请
点击举报。