找回密码
 加入
搜索
查看: 4687|回复: 6

[图形处理] 【已解决】GDI图片上的文字处理

  [复制链接]
发表于 2011-10-28 04:02:47 | 显示全部楼层 |阅读模式
本帖最后由 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
发表于 2011-10-28 04:38:33 | 显示全部楼层
#Include <GDIPlus.au3>
_GDIPlus_GraphicsSetSmoothingMode
发表于 2011-10-28 06:23:27 | 显示全部楼层
回复 2# netegg


    蛋神这么早起床?
发表于 2011-10-28 07:50:43 | 显示全部楼层
没看懂问题
 楼主| 发表于 2011-10-29 22:12:52 | 显示全部楼层
$hFont = _GDIPlus_FontCreate($hFamily, 12, 1);用上面创建的字体族创建一个字体大小为20,粗体+斜体,坐标参照为像素的字体对象,坐标参照很重要,会影响到字体在图形上的位置

修改这句把$hFont = _GDIPlus_FontCreate($hFamily, 12, 1,5)加上坐标参照5,我试了很多次,只有这个5才行,然后调整下字体大小就行了。
发表于 2011-11-1 13:28:01 | 显示全部楼层
好東西啊  學習  自己也研究下
发表于 2017-3-20 21:34:42 | 显示全部楼层
试验了一下,怎么不显示啊
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-12-25 00:56 , Processed in 0.074096 second(s), 24 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表