找回密码
 加入
搜索
查看: 310|回复: 2

[图形处理] 【已解决】请教如何从单词处断行?才不会将一个单词断成两行,文本长度不定

[复制链接]
发表于 2024-3-6 16:40:22 | 显示全部楼层 |阅读模式
本帖最后由 891108506 于 2024-3-6 23:34 编辑


这是坛友的代码

请教如何从单词处断行?才不会将一个单词断成两行,文本长度不定

#include <GUIConstants.au3>
#include <WindowsConstants.au3>
#include <GDIPlus.au3>;内嵌GDI+的UDF,以供程序调用GDI+
Global $ghGDIPDll = 0
$Read = "公告内容:aaaa ssss  ddddd  fff  ggg hhhh jjjjj kkkk zzzz xxxx cccc vvvv bbbb nnnn mmmm qqqqq wwww eeeeee  rrrrr";公告内容 
$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(0xffffffff);创建实心画笔对象,其中Alpha通道值为255,RGB值为0xff00ff
$hFormat = _GDIPlus_StringFormatCreate();创建字符串格式对象
$hFamily = _GDIPlus_FontFamilyCreate("微软雅黑");创建字体为"微软雅黑"的字体族对象
$hFont = _GDIPlus_FontCreate($hFamily, 20, 1, 5);用上面创建的字体族创建一个字体大小为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

这是代码出来的效果




这是我想要的效果








本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
发表于 2024-3-6 19:07:38 | 显示全部楼层
没 [ code ] 标签真是退步了…… 没办法说第几行了
改一下以下这里就行了
$tLayout = _GDIPlus_RectFCreate(50, 45, $w, 0);创建 $tagGDIPRECTF 数据结构

评分

参与人数 1金钱 +30 收起 理由
891108506 + 30 很给力!

查看全部评分

 楼主| 发表于 2024-3-6 23:30:38 | 显示全部楼层
afan 发表于 2024-3-6 19:07
没 [ code ] 标签真是退步了…… 没办法说第几行了
改一下以下这里就行了
$tLayout = _GDIPlus_RectFCreate ...

可以了,A大出手就是不一样
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-12-22 11:48 , Processed in 0.084263 second(s), 27 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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