.版本 2
.支持库 RegEx
.程序集 窗口程序集1
.子程序 _按钮1_被单击
.局部变量 hToken, 整数型
.局部变量 s, 整数型
.局部变量 ScriptDir, 文本型
s = 取启动时间 ()
ScriptDir = 取运行目录 ()
hToken = _GDIPlus_Startup ()
_GDIPlus_ImageToGray (ScriptDir + “\haijie1223.jpg”, ScriptDir + “\New_灰度.jpg”)
GdiplusShutdown (hToken)
s = 取启动时间 () - s
标题 = “耗时:” + 到文本 (s) + “毫秒”
.子程序 _GDIPlus_ImageToGray, 整数型, , 将彩色转为灰度(去色),输出文件或灰度图像对象句柄
.参数 sFile, 文本型
.参数 sFile_Gray, 文本型
.局部变量 hImage, 整数型
.局部变量 iW, 整数型
.局部变量 iH, 整数型
.局部变量 hGraphics, 整数型
.局部变量 hIA, 整数型
.局部变量 tCOLORMATRIX, cColorMatrix
.局部变量 iRet, 整数型
GdipLoadImageFromFile (编码_Ansi到Unicode (sFile, ), hImage)
GdipGetImageWidth (hImage, iW)
GdipGetImageHeight (hImage, iH)
iRet = GdipGetImageGraphicsContext (hImage, hGraphics)
iRet = GdipCreateImageAttributes (hIA)
tCOLORMATRIX = _GDIPlus_ColorMatrixCreateGrayScale ()
iRet = GdipSetImageAttributesColorMatrix (hIA, 0, 真, tCOLORMATRIX, 0, 0)
iRet = GdipDrawImageRectRect (hGraphics, hImage, 0, 0, iW, iH, 0, 0, iW, iH, 2, hIA, 0, 0)
.如果 (sFile_Gray ≠ “”)
iRet = _GDIPlus_ImageSaveToFile (hImage, sFile_Gray)
GdipDeleteGraphics (hGraphics)
GdipDisposeImage (hImage)
返回 (iRet)
.否则
返回 (hImage)
.如果结束
.子程序 _GDIPlus_ImageSaveToFile, 整数型
.参数 hImage, 整数型
.参数 sFileName, 文本型
.局部变量 sExt, 文本型
.局部变量 pStr, 文本型
.局部变量 Clsid, 字节集
.局部变量 iRet, 整数型
.局部变量 StringRegExp, 正则表达式
.局部变量 aRet, 搜索结果, , "0"
StringRegExp.创建 (“.*\.(\w{3,5})$”, )
aRet = StringRegExp.搜索全部 (sFileName)
sExt = aRet [1].取子匹配文本 (sFileName, 1, )
.如果真 (sExt = “”)
sExt = “jpg”
.如果真结束
.判断开始 (sExt = “bmp”) ' bmp
pStr = “{557CF400-1A04-11D3-9A73-0000F81EF32E}”
.判断 (sExt = “jpg”) ' jpg
pStr = “{557CF401-1A04-11D3-9A73-0000F81EF32E}”
.判断 (sExt = “gif”) ' gif
pStr = “{557CF402-1A04-11D3-9A73-0000F81EF32E}”
.判断 (sExt = “tiff”) ' tiff
pStr = “{557CF405-1A04-11D3-9A73-0000F81EF32E}”
.判断 (sExt = “png”) ' png
pStr = “{557CF406-1A04-11D3-9A73-0000F81EF32E}”
.默认
.判断结束
Clsid = 取空白字节集 (16)
CLSIDFromString (A2W (pStr), Clsid) ' 获取图像格式对应的Clsid
iRet = GdipSaveImageToFile (hImage, 编码_Ansi到Unicode (sFileName, ), Clsid, 0)
.如果 (iRet = 0)
返回 (1)
.否则
返回 (0)
.如果结束
.子程序 A2W, 字节集, , 将Ansi转成Unicode
.参数 欲转换的文本, 文本型
.局部变量 缓冲区, 字节集
.局部变量 缓冲区大小, 整数型
缓冲区大小 = MultiByteToWideChar (0, 0, 欲转换的文本, -1, { }, 0) × 2
缓冲区 = 取空白字节集 (缓冲区大小)
MultiByteToWideChar (0, 0, 欲转换的文本, 取文本长度 (欲转换的文本), 缓冲区, 缓冲区大小)
返回 (缓冲区)
.子程序 _GDIPlus_ColorMatrixCreateGrayScale, cColorMatrix
.局部变量 iI, 整数型
.局部变量 iJ, 整数型
.局部变量 tCM, cColorMatrix
.局部变量 aLums, 小数型, , "4"
aLums [1] = 0.3086
aLums [2] = 0.6094
aLums [3] = 0.082
aLums [4] = 0
.变量循环首 (1, 3, 1, iI)
.变量循环首 (1, 3, 1, iJ)
tCM.cColorMatrix [iI] [iJ] = aLums [iI]
.变量循环尾 ()
.变量循环尾 ()
tCM.cColorMatrix [19] = 1
tCM.cColorMatrix [25] = 1
返回 (tCM)
.子程序 编码_Ansi到Unicode, 字节集, 公开, 将Ansi码转换为Unicode码;成功返回转换后的字节集;
.参数 Ansi, 文本型, , 欲转换的Ansi文本
.参数 非标准Unicode编码, 逻辑型, 可空, 默认为假,为标准Unicode编码
.局部变量 数据2, 字节集
.局部变量 长度, 整数型
.如果真 (Ansi = “”)
返回 ({ })
.如果真结束
长度 = MultiByteToWideChar (0, 0, Ansi, -1, { }, 0)
数据2 = 取空白字节集 (长度 × 2)
MultiByteToWideChar (936, 0, Ansi, -1, 数据2, 长度 × 2)
.如果真 (非标准Unicode编码)
数据2 = 取字节集左边 (数据2, 取字节集长度 (数据2) - 2)
.如果真结束
返回 (数据2)
.子程序 _GDIPlus_Startup, 整数型, 公开, 成功返回标志
.局部变量 tInput, GdiplusStartupInput
.局部变量 tToken, 整数型
tInput.GdiplusVersion = 1
GdiplusStartup (tToken, tInput, 0)
返回 (tToken)
557cf