怎么反着打印数字?(急用!!! 100分)。(100分)

Q

qghwei

Unregistered / Unconfirmed
GUEST, unregistred user!
我要做一些号码的打印,打印出来的是反着的,粘贴到物体上才能成正的。
现在急需反着打印或能反着显示的。
谢谢!!各位高手!
 
输出成图像,然后把图像水平镜像,打印镜像后的图像。下面是图像镜像的代码。
---------------------------------------------------
来自:卷起千堆雪tyn 时间:2001-4-2 4:21:22 ID:487996
procedure TMainForm.N16Click(Sender: TObject);
var
I,J :integer;
p,p1 :pByteArray;
Bmp,Bmp1 :TBitmap;
begin
Bmp :=TBitmap.Create;
Bmp.Assign(MainImage.Picture.Bitmap);
Bmp1 :=TBitmap.Create ;
Bmp1.Assign(MainImage.Picture.Bitmap);
case (Sender as TMenuItem).Tag of
1://///////////水平镜像
begin
for J :=0 to Bmp.Height-1do
begin
p :=Bmp.ScanLine[J];
P1 :=Bmp1.ScanLine[J];
for I :=0 to Bmp.Width-1do
begin
p1[3*(Bmp.Width-1-I)+2] :=p[3*I+2];
p1[3*(Bmp.Width-1-I)+1] :=p[3*I+1];
p1[3*(Bmp.Width-1-I)] :=p[3*I];
end;
end;
BitBlt(MainImage.Canvas.Handle,0,0,MainImage.Width,MainImage.Height,
Bmp1.Canvas.Handle,0,0,SRCCOPY);
end;
2://////////////////垂直镜像
begin
for J :=0 to Bmp.Height-1do
begin
p :=Bmp.ScanLine[J];
P1 :=Bmp1.ScanLine[Bmp.Height-1-J];
for I :=0 to Bmp.Width-1do
begin
p1[3*I+2] :=p[3*I+2];
p1[3*I+1] :=p[3*I+1];
p1[3*I] :=p[3*I];
end;
end;
BitBlt(MainImage.Canvas.Handle,0,0,MainImage.Width,MainImage.Height,
Bmp1.Canvas.Handle,0,0,SRCCOPY);
end;
end;
Bmp.Free;
Bmp1.Free;
end;
 
case (Sender as TMenuItem).Tag of
运行时出错!不过现在能用了,但是如果图象宽度大于500时,右侧的图象就不能镜像
反转显示了。能告诉我为什么吗?谢谢!!
 
你只需要代码定义和下面这一段,不需要case (Sender as TMenuItem).Tag:
------------------------------
for J :=0 to Bmp.Height-1do
begin
p :=Bmp.ScanLine[J];
P1 :=Bmp1.ScanLine[J];
for I :=0 to Bmp.Width-1do
begin
p1[3*(Bmp.Width-1-I)+2] :=p[3*I+2];
p1[3*(Bmp.Width-1-I)+1] :=p[3*I+1];
p1[3*(Bmp.Width-1-I)] :=p[3*I];
end;
end;
BitBlt(MainImage.Canvas.Handle,0,0,MainImage.Width,MainImage.Height,
Bmp1.Canvas.Handle,0,0,SRCCOPY);
-------------------------------------------------
//但是如果图象宽度大于500时,右侧的图象就不能镜像
我想这与你的bitmap的宽度设置有关,你需要先得到图像的最大宽度,然后设置bitmap的
width。下面这行代码可以得到当前字体设置下的字符串以像素为单位的宽度。
Canvas.TextWidth(YourString);
得到行高:
Canvas.TextHeight(任意字符);
 
顶部