关于动态生成bmp图的问题(100分)

  • 主题发起人 主题发起人 嘻嘻哈
  • 开始时间 开始时间

嘻嘻哈

Unregistered / Unconfirmed
GUEST, unregistred user!
有一副bmp图,需要在程序中动态的在这副图上写一些字,这些字从数据库中来
我现在的方式是用image控件在它的canvas上写字,但写出来的字比较难看。
有没有其他的方法,让我在canvas上写出效果好一点的字
 
字写得难看是因为你选定的字体字号颜色不好看。
字体Name最好选中文如“宋体”等(如果你是要写中文的话),字号选9,12以及12以上的,
颜色搭配嘛要看你自己的审美观点了。
另外,可以用TLogFont写一些复杂的字体,比如扁的,斜的,旋转的字体,再结合Path可
以写出“艺术汉字”中的任意字型……
广阔天地吧?
 
你说的我都视过了,用Tfont是写不出photeshop下的字的效果的
TlogFont? 是何东东?
 
>>写不出photeshop下的字的效果的
PhotoShop下面的Type是经过特殊处理的,柔化边缘抗锯齿。。。N麻烦

 
Windows的逻辑字体(LogFont)可以使用CreateFont或CreateFontIndirect这两个
Windows API函数来定义任何想要的字体,由于CreateFont所需的参数太多通常我们使用
CreateFontIndirect来建立所需的逻辑字体,这个API函数在Delphi中的声明为
function CreateFontIndirect(const p1: TLogFont): HFONT; stdcall;
在Delphi 4 的Windows.pas中TLogFont的定义在第12407开始。对于其中
lfItalic、lfUnderline、lfStrikeOut的值,如果非0则分别表示采用斜体字、加上下划
线、加上删除线,反之则用正常字体。

例如:
procedure TForm1.Button1Click(Sender: TObject);
var
r:string;
LogFont:TLogFont;
NewFont,OldFont:THandle;
begin
SetBkMode(Canvas.Handle,Transparent);
LogFont.lfHeight :=60;
{lfHeight指定以逻辑单位标定的字体高度,取值可为正负或零,对于需要随意定义字体
高度的情况下通常取负值,以保证获得实际尺寸的字体。}
LogFont.lfWidth :=30;
{lfWidth用于指定字体的平均宽度,由于Windows系统下的大多数字体都是比例字体因而
采用平均宽度这个表示方法。若指定为0,则系统会自动根据适当的比例自动处理宽度。}
LogFont.lfEscapement :=400;
{指定输出方向与当前坐标系X轴之间的以十分之一度为单位的角度,这里就是40度了。}
LogFont.lfWeight :=0;
LogFont.lfItalic :=0;
LogFont.lfUnderline :=0;
LogFont.lfStrikeOut :=0;
LogFont.lfCharSet :=DEFAULT_CHARSET;
r :='宋体'#0;
move(r[1],LogFont.lfFaceName[0],length(r)+1);
NewFont :=CreateFontIndirect(LogFont);
OldFont :=SelectObject(Canvas.Handle,NewFont);
Canvas.TextOut(10,200,'测试字体');{输出内容是“测试字体”}
SelectObject(Canvas.Handle,OldFont);{用完以后还要还原字体}
DeleteObject(NewFont);
end;
 
就是啊! PhotoShop里面的全部是经过自己的算法加工的,
不过你可以试试LMD,1stclass这些里面的LABEL控件,
有一下效果,但是不会比PhotoShop的好. 要是真有哪个东东
能做到PhotoShop那样,别忘记告诉我一下...
 
我以为是不会保存呢?
原来这个啊,没劲,
其实你把图片处理好,再在适当的位置写入某些颜色的字体也很好看啊
难看么,不
 
后退
顶部