本帖最后由 tangqinfei 于 2011-10-29 22:13 编辑
能不能把公告内容里的所有文字都在图片上显示出来。#include <GUIConstants.au3>
#include <WindowsConstants.au3>
#include <GDIPlus.au3>;内嵌GDI+的UDF,以供程序调用GDI+
$path = @ScriptDir & "\公告内容.txt";设置变量
$Read = FileRead($path,FileGetSize($path));从此前已打开的文本文件中读取指定数量的字符
Global Const $BMPCLSID = '{557CF400-1A04-11D3-9A73-0000F81EF32E}';指定BMP的图像编码器,测试N次为个值是固定的,所以直接用,大家也可以用_GDIPlus_EncodersGetCLSID('BMP')
Global Const $JPGCLSID = '{557CF401-1A04-11D3-9A73-0000F81EF32E}';同上
_GDIPlus_Startup();启动GDI+
$hImage = _GDIPlus_BitmapCreateFromFile(@ScriptDir & "\bg.jpg");从文件中创建一个位图对象
$w = _GDIPlus_ImageGetWidth($hImage);返回图像对象的宽度
$hGraphic = _GDIPlus_ImageGetGraphicsContext($hImage);获取刚刚创建的位图对象的图形句柄
_GDIPlus_GraphicsSetSmoothingMode($hGraphic,2);设置图形的平滑度,使图形的图像有抗锯齿功能
DllCall($ghGDIPDll, "int", "GdipSetTextRenderingHint", "hwnd", $hGraphic , "int", 4);设置字体的平滑度,使图形的文字有抗锯齿功能,谢谢The886研究出来!
$hBrush = _GDIPlus_BrushCreateSolid(0xffff00ff);创建实心画笔对象,其中Alpha通道值为255,RGB值为0xff00ff
$hFormat = _GDIPlus_StringFormatCreate();创建字符串格式对象
$hFamily = _GDIPlus_FontFamilyCreate("微软雅黑");创建字体为"微软雅黑"的字体族对象
$hFont = _GDIPlus_FontCreate($hFamily, 12, 1);用上面创建的字体族创建一个字体大小为20,粗体+斜体,坐标参照为像素的字体对象,坐标参照很重要,会影响到字体在图形上的位置
$tLayout = _GDIPlus_RectFCreate(50, 45, 0, 0);创建 $tagGDIPRECTF 数据结构
$string = $Read;定义字符串
$aInfo = _GDIPlus_GraphicsMeasureString($hGraphic, $string, $hFont, $tLayout, $hFormat);根据上面创建的字体、字符串等信息测量字符串在图形中的尺寸,以便在图形中绘制
$Dwitdh = DllStructGetData($aInfo[0], "Width");获取上面创建的文本在图形中占用的宽度
ConsoleWrite($Dwitdh & @CRLF)
$xx = ($w - $Dwitdh)/2;文本居中后的X坐标
DllStructSetData($aInfo[0], "X", $xx);设置文本居中后的X坐标
;~ DllStructSetData($aInfo[0], "Y", $yy);设置文本居中后的Y坐标
_GDIPlus_GraphicsDrawStringEx($hGraphic, $string, $hFont, $aInfo[0], $hFormat, $hBrush);在图形中绘制上面创建的字符串对象
_GDIPlus_ImageSaveToFileEx($hImage, @ScriptDir & "\aa.bmp",$BMPCLSID,0);把位图对象保存为BMP文件
_GDIPlus_GraphicsDispose($hGraphic);释放资源
_WinAPI_DeleteObject($hImage);释放资源
_GDIPlus_Shutdown();关闭GDI+
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Form1", 545, 300, 192, 114)
$pic=GUICtrlCreatePic(@ScriptDir & "\aa.bmp",0,0,545,300)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
EndSwitch
WEnd
|