求镜相偏转问题的解决方法(100分)

  • 主题发起人 主题发起人 kkxd
  • 开始时间 开始时间
K

kkxd

Unregistered / Unconfirmed
GUEST, unregistred user!
先读进来字,然后将读进来的字镜相反转,就类似照镜子那样,最后显示出反字。求大家帮助,谢谢!
 
似乎api可以做到哦。。
 
是图还是字?我做过图的几行代码
 
delphidragon:是图的就可以,可以把你的源码给我看看吗?谢谢了
netbirdfly:api我这有一段源码如下,但是只能做对于x轴对称,做不出对y轴对称的,请指点
procedure TForm1.Button1Click(Sender: TObject);
var
lf : TLogFont;
tf : TFont;
begin
with Form1.Canvas do begin
Font.Name := 'Arial';
Font.Size := 24;
tf := TFont.Create;
tf.Assign(Font);
GetObject(tf.Handle, sizeof(lf), @lf);
lf.lfEscapement := -1800;//与X轴的夹角
lf.lfOrientation := 0;;//与Y轴的夹角
tf.Handle := CreateFontIndirect(lf);
Font.Assign(tf);
tf.Free;
TextOut(20, Height div 2, 'Rotated Text!');
end;
end;
 
翻转字的(未考虑中文情况):
function Reverse(s: string): string;
var
i, Len: Integer;
begin
Len := Length(s);
SetLength(Result, Len);
for i := 1 to Len do
Result := s[Len + 1 - i];
end;
 
用Image吧。
Image1.Canvas.TextOut

procedure TForm1.Button2Click(Sender: TObject);
var
Bmp1,Bmp2 :TBitmap;
I,J :Integer;
p1,p2 :PByteArray;
begin
Bmp1 :=TBitmap.Create;
Bmp1.PixelFormat :=pf24Bit;
Bmp1.Assign(Image1.Picture.Bitmap);
Bmp2 :=TBitmap.Create;
Bmp2.PixelFormat :=pf24Bit;
Bmp2.Assign(Bmp1);
for J :=0 to Bmp1.Height-1 do
begin
p1 :=Bmp1.ScanLine[J];
p2 :=Bmp2.ScanLine[Bmp1.Height-1-J];
for I :=0 to Bmp1.Width-1 do
begin
p2[3*I+2] :=p1[3*I+2];
p2[3*I+1] :=p1[3*I+1];
p2[3*I] :=p1[3*I];
end;
end;
Image1.Picture.Bitmap.Assign(Bmp2);
Bmp1.Free;
Bmp2.Free;
end;
 
bubble:可以注释一下你的程序吗?偶有点看不懂,谢谢!qq:525734
 
还有你是怎么把文字转成image的?
 
我的原码,怎么翻都可以,非常方便,现在是左右,把SR,DR()中0的位置换一下就上下了
var
xx,yy:Integer;
SR,DR:TRect;
begin
xx:=Image0.Picture.Width;
yy:=Image0.Picture.Height;
SR:=Rect(0,0,xx,yy);
DR:=Rect(xx,0,0,yy);
T.Width:=xx;
T.Height:=yy;
T.Canvas.CopyRect(DR,Image0.Canvas,SR);
Image0.Picture:=TI.Picture;
end;
 
怎么把图反过来后放回原位置?delphidragon:可以注释一下你的程序吗?可以把前面的过程变量写全了吗?
 
这就是全部程序!就这么简单!
在form上放一个有图片的Image0,一个button1,执行看看

procedure TForm1.Button1Click(Sender: TObject);
var
xx,yy:Integer;
SR,DR:TRect;
begin
xx:=Image0.Picture.Width;
yy:=Image0.Picture.Height;
SR:=Rect(0,0,xx,yy);
DR:=Rect(xx,0,0,yy);
T.Width:=xx;
T.Height:=yy;
T.Canvas.CopyRect(DR,Image0.Canvas,SR);
Image0.Picture:=TI.Picture;
end;
 
to delphidragon:
T.Width:=xx;
T.Height:=yy;
T.Canvas.CopyRect(DR,Image0.Canvas,SR);
你这个T是什么?没定义也,而且如果是将原图反转再放回原位置,好象就不用管width和height了吧?能解释一下吗
也许我理解错了,谢谢!
 
如果是正方形的图就不用管,否则同时再转90度呢,
这是多用的程序,可同时镜象和90度转,效率极高,1年前曾费我不少脑子!
var
T:TImage; 呀
 
也许应该告诉你,别忘记

T:=TImage.Create;
try
...
finally
T.Free;
end;
 
全部代码:
procedure TForm1.Button1Click(Sender: TObject);
var
xx,yy:Integer;
SR,DR:TRect;
T:TImage;
begin
T:=TImage.Create;
try
xx:=Image0.Picture.Width;
yy:=Image0.Picture.Height;
SR:=Rect(0,0,xx,yy);
DR:=Rect(xx,0,0,yy);
T.Width:=xx;
T.Height:=yy;
T.Canvas.CopyRect(DR,Image0.Canvas,SR);
Image0.Picture:=TI.Picture;
finally
T.Free;
end;
end;
 
delphidragon:此程序运行不通的
 
T:=TImage.Create 有误,着急ing
 
//T:=TImage.Create 有误
uses ExtCtrls
 
ExtCtrls是什么?在线等
 
T:=TImage.Create(self);
我的程序使用Image1.Canvas.TextOut把字转成图像阿!![:)]
 

Similar threads

S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
913
SUNSTONE的Delphi笔记
S
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
后退
顶部