| ''';. ”
第四个关键技术:把文本转换为图像 要把文本转换为图片,必须获取两个重要参数:转换后的宽和高,要取得这两个参数,我们可以使用 GetTextExtentPoint32 函数,该函数的定义如下: function GetTextExtentPoint32(DC: HDC; Str: PChar; Count: Integer; var Size: TSize): BOOL; DC 传入设备句柄 Str 为文本内容 Count 为文本的长度(字节) Size 返回宽和高 在实际应用中,往往被转换的文本有多行,且每一行的长度不定, 所以我们还需要在生成图像前进行一遍预扫,以便获得完整的图像大小
下面演示了文本转换为图像的代码
//////////////////////////////////////////////////////////////////////////////// // 功能 : 把文本转换为位图 // AOwner : 窗体参数 // AText : 要转换的文本 // AFont : 文本的字体 // ABitmap : 转换后的位图对象 // 日期 : 2003.12.15 //////////////////////////////////////////////////////////////////////////////// procedure TextToBitmap(AOwner:TObject;const AText:TStrings;AFont:TFont;ABitmap:TBitmap); var i :integer; iWidth,iHeight :integer; iCharHeight :integer; s :string; r :TRect; size :TSize; lblTemp :TLabel; begin iWidth:=0; iHeight:=0;
lblTemp:=TLabel.Create(nil); r.Top:=0; try lblTemp.Visible:=false; lblTemp.Parent:=TWinControl(AOwner); lblTemp.Font.Assign(AFont);
ABitmap.Canvas.Brush.Style:=bsClear; ABitmap.Canvas.Pen.Color:=rgb(0,0,0); ABitmap.Canvas.Brush.Color:=RGB(255,255,255); ABitmap.Canvas.Font.Assign(AFont);
// 下面代码用户获得文本的最大宽度和高度 for i:=0 to AText.Count-1 do begin s:=AText.Strings[i]; if s='''''''' then s:='''' ''''; lblTemp.Caption:=s;
GetTextExtentPoint32(lblTemp.Canvas.Handle,pchar(lblTemp.Caption),lblTemp.GetTextLen,size); if iWidth<size.cx then iWidth:=Size.cx; iHeight:=iHeight+Size.cy; end;
// 获得一个字符的高度 GetTextExtentPoint32(lblTemp.Canvas.Handle,pchar('''' ''''),length('''' ''''),size); iCharHeight:=size.cy;
ABitmap.Width:=iWidth; ABitmap.Height:=iHeight; for i:=0 to AText.Count-1 do begin s:=AText.Strings[i];
r.Left:=0; r.Right:=ABitmap.Width; r.Bottom:=r.Bottom+iCharHeight;
DrawText(ABitmap.Canvas.Handle,PChar(s),length(s),r,0); r.Top:=r.Top+iCharHeight; end; finally lblTemp.Free; end; end;
2003.12.15 凌丽软件工作室 http://wosens.com
上一页 [1] [2] |