标签上的的字转化为点陈 ( 积分: 20 )

  • 主题发起人 主题发起人 yanmin11003
  • 开始时间 开始时间
Y

yanmin11003

Unregistered / Unconfirmed
GUEST, unregistred user!
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls;
const
pbig =4;


type
TForm1 = class(TForm)
Button1: TButton;
Label1: TLabel;
Image1: TImage;
procedure Button1Click(Sender: TObject);
procedure TForm1.FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
procedure drpiont(var curclab : Tlabel;var curimage :Timage);
var
Form1: TForm1;

implementation

{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
label1.Caption :='转化为点阵';
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
drpiont(label1,image1);
end;

procedure drpiont(var curclab : Tlabel;var curimage :Timage);
var
tleft,ttop,drleft,drtop : integer;

begin

curimage.Picture :=nil;

curimage.Width :=curclab.Width * pbig;
curimage.Height :=curclab.Height * pbig;
curclab.Transparent :=false;
curimage.Transparent :=false;
curimage.Canvas.Brush.Color :=clwhite;
curimage.Canvas.FillRect(curclab.Canvas.ClipRect);

for tleft :=0 to curclab.Width-1 do
for ttop :=0 to curclab.Height-1 do
if curclab.Canvas.Pixels[tleft,ttop] = curclab.Font.Color then
begin
drleft := tleft * pbig ;
drtop := ttop * pbig ;
while (drleft <drleft+pbig-1) do
begin
drleft :=drleft+1;
while(drtop<drtop+pbig-1) do
begin
drtop :=drtop+1;
curimage.Canvas.Pixels[drleft,drtop] :=curimage .Canvas.Pen.Color;
end;
end;
end;



curclab .Transparent:=false;
curimage.Transparent:=false;

end;
end.



在这个程序中我想把LABEL1上的字在image1上以点阵的形式画出来,看看错误思想在哪
 
for tleft :=0 to curclab.Width-1 do
for ttop :=0 to curclab.Height-1 do
if curclab.Canvas.Pixels[tleft,ttop] = curclab.Font.Color then
begin
drleft := tleft * pbig ;
drtop := ttop * pbig ;
while (drleft <drleft+pbig-1) do
begin
drleft :=drleft+1;
while(drtop<drtop+pbig-1) do
begin
drtop :=drtop+1;
curimage.Canvas.Pixels[drleft,drtop] :=curimage .Canvas.Pen.Color;
end;
end;
end;

可能这一部分占的资源太多.
 
var
i, j, k: integer;
itmp: integer;
begin
for i := 0 to 15 do
begin
for k := 0 to 1 do
begin
itmp := 0;
for j := 0 to 7 do
if label1.Canvas.Pixels[k * 8 + j + 1, i + 2] <> 0 then
begin
memo1.Text := memo1.Text + '0';
paintbox1.Canvas.Pixels[k * 8 + j, i] := 255;
end
else
begin
itmp := itmp + (1 shl (7 - j));
paintbox1.Canvas.Pixels[k * 8 + j, i] := 1;
memo1.Text := memo1.Text + '1';

end;
memo2.Text := memo2.Text + '$' + inttohex(itmp, 2) + ',';
memo1.Text := memo1.Text + ' ';
end;
memo1.Text := memo1.Text + chr($0D) + chr($0A);
end;
// paintbox1.Canvas.Pixels[i,j]:=image1.Canvas.Pixels[i,j];

end;
 
上面的代码是把Label上的字转化为16*16点阵信息并输出
 
label1.Canvas.Pixels[k * 8 + j + 1, i + 2] <> 0为什么不是label1.Canvas.Pixels[k * 8 + j , i ] <> 0
 
label显示偏移了2象素,+2是为了减少点阵数据的保存
 
你怎么知道标签上的点的一个字符是16*16,若不是16*16,怎么转化成16*16
 
若不是,就取12*12或24*24点阵呀,我要的16就取16了.这跟你的需求有关系,跟标签上的字符没关系.不要告诉我标签还可以设成可大可小呢.用我的代码试一试吧,你就会知道怎么办了.赚点分真难
 
label1.Canvas.Pixels[k * 8 + j + 1, i + 2]这是标签上(k * 8 + j + 1,i + 2)这个坐标上的点的颜色,怎么会与字体的大小,字体,风格没有关系呢?
 
var
i, j, k: integer;
itmp: integer;
begin
for i := 0 to label1.Height-1 do
begin
for j := 0 to label1.Width-1 do
if label1.Canvas.Pixels[j, i] = 0 then
begin
paintbox1.Canvas.Pixels[j*2, i*2] := 1;

end;
end;
end;
这就是你要的吧,有些东西自己研究一下
 
是的,这个我会,我相要知道的如何把它转化汉字16*16,字母5*7,如何转化
现在我要明白是这个
 
20分呀,兄弟,我上面的代码已经可以取得16点阵信息了.网上自己找找吧.这边说不清楚
 
帮你顶一下,接个小分
 
你没明白我的意思,标签上的一个汉字若不是16*16的字库 如何转化成16*16的字库
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
504
import
I
I
回复
0
查看
724
import
I
I
回复
0
查看
709
import
I
后退
顶部