图象正向旋转90(50分)

  • 主题发起人 主题发起人 hwljerry
  • 开始时间 开始时间
H

hwljerry

Unregistered / Unconfirmed
GUEST, unregistred user!
各位大哥,帮我把下面的反向旋转改成正向旋转。
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, jpeg, ExtCtrls, StdCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
Image1: TImage;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
{ Private declarations }
TempBmp:TBitmap;
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure RotateBMP(BMP,TempBmp:TBitmap);
var
i,j,W:Integer;
ScOrg,ScDest:Array of PIntegerArray;
begin
TempBmp.Assign(BMP);
W:=BMP.Width;
BMP.Width:=BMP.Height;
BMP.Height:=W;
Dec(W);

SetLength(ScDest,BMP.Height);
SetLength(ScOrg,TempBmp.Height);
for i:=0 to BMP.Height-1 do ScDest:=BMP.ScanLine;
for i:=0 to TempBmp.Height-1 do ScOrg:=TempBmp.ScanLine;

for i:=0 to BMP.Height-1 do
for j:=0 to BMP.Width-1 do
ScDest[W-i][j]:=ScOrg[j];
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
RotateBMP(Image1.Picture.Bitmap,TempBmp);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
Image1.Picture.Bitmap.PixelFormat:=pf32bit;
TempBmp:=TBitmap.Create;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
TempBmp.Free;
end;

end.
 
procedure RotateBmpS(Bmp, TempBmp: TBitmap);
var
i,j,W,H:Integer;
ScOrg,ScDest:Array of PIntegerArray;
begin
TempBmp.Assign(BMP);
H:= Bmp.Height;
W:=BMP.Width;
BMP.Width:=BMP.Height;
BMP.Height:=W;
Dec(W);

SetLength(ScDest,BMP.Height);
SetLength(ScOrg,TempBmp.Height);
for i:=0 to BMP.Height-1 do ScDest:=BMP.ScanLine;
for i:=0 to TempBmp.Height-1 do ScOrg:=TempBmp.ScanLine;

for i:=0 to BMP.Height-2 do
for j:=0 to BMP.Width-1 do
ScDest[w-i][h-j]:=ScOrg[j][w-i];
end;

搞定了。
 
http://bluemoon.diy.myrice.com/efg/RTTbySL.htm
 
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, jpeg, ExtCtrls, StdCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
Image1: TImage;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
TempBmp:TBitmap;
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure RotateBMP2(BMP,TempBmp:TBitmap);
var
i,j,W:Integer;
ScOrg,ScDest:Array of PIntegerArray;
begin
TempBmp.Assign(BMP);
W:=BMP.Height;
BMP.Height:=BMP.Width;
BMP.Width:=W;
Dec(W);

SetLength(ScDest,BMP.Height);
SetLength(ScOrg,TempBmp.Height);
for i:=0 to BMP.Height-1 do ScDest:=BMP.ScanLine;
for i:=0 to TempBmp.Height-1 do ScOrg:=TempBmp.ScanLine;

for i:=0 to BMP.Height-1 do
for j:=0 to BMP.Width-1 do
ScDest[W-j]:=ScOrg[j];

end;

procedure RotateBMP(BMP,TempBmp:TBitmap);
var
i,j,W:Integer;
ScOrg,ScDest:Array of PIntegerArray;
begin
TempBmp.Assign(BMP);
W:=BMP.Width;
BMP.Width:=BMP.Height;
BMP.Height:=W;
Dec(W);

SetLength(ScDest,BMP.Height);
SetLength(ScOrg,TempBmp.Height);
for i:=0 to BMP.Height-1 do ScDest:=BMP.ScanLine;
for i:=0 to TempBmp.Height-1 do ScOrg:=TempBmp.ScanLine;

for i:=0 to BMP.Height-1 do
for j:=0 to BMP.Width-1 do
ScDest[W-i][j]:=ScOrg[j];
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
RotateBMP(Image1.Picture.Bitmap,TempBmp);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
Image1.Picture.Bitmap.PixelFormat:=pf32bit;
TempBmp:=TBitmap.Create;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
TempBmp.Free;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
RotateBMP2(Image1.Picture.Bitmap,TempBmp);
end;

end.
 
接受答案了.
 
后退
顶部