Hallo
Ich will ein Bild um sein Zentrum drehen. Dies funktioniert auch soweit nur dauert es viel zu lang.
Unter zu lang versteh ich 8 Sekunden für ein Bild von 3000x1000 Pixel.
Meiner Meinung nach liegt es an folgender Zeile:
NeuesBild.Canvas.Pixels[xneu,yneu]:=BildKopie.Canvas.Pixels[xalt,yalt];
Wenn ihr einen schnelleren Weg wisst sagt bescheid.
Hier der gesamte Quellcode für die Übersicht:
Delphi-Quellcode:
procedure TForm1.BT_DrehenClick(Sender: TObject);
Var
xalt,yalt,xneu,yneu,breite,hoehe,xm,ym:integer;
b,g,s,c:single;
begin
g:=strtofloat(ED_Grad.Text);
Breite:=Image1.Width;
Hoehe:=Image1.Height;
BildKopie:=TBitmap.Create;
BildKopie.SetSize(Breite,Hoehe);
BildKopie.Pixelformat:=pf1bit; //schwarz weiß
BildKopie.Canvas.Draw(0, 0, Image1.Picture.Graphic); //BildKopie:=Image1
NeuesBild:=TBitmap.Create;
NeuesBild.SetSize(Breite,Hoehe); // 1xKopie 1xLeer clwhite
BildKopie.Pixelformat:=pf1bit;
NeuesBild.Canvas.Brush.Color:=clwhite;
NeuesBild.Canvas.Pen.Color:=clwhite;
NeuesBild.Canvas.Rectangle(0,0,Breite,Hoehe);
xm:=round(breite/2);
ym:=round(hoehe/2);
b:=(g/360*2*PI);
s:=SIN(b);
c:=COS(b);
for yalt := 0 to Hoehe-1 do
for xalt := 0 to Breite-1 do
begin
xneu:=round((xalt-xm)*c-(yalt-ym)*s)+xm;
yneu:=round((xalt-xm)*s+(yalt-ym)*c)+ym;
NeuesBild.Canvas.Pixels[xneu,yneu]:=BildKopie.Canvas.Pixels[xalt,yalt];
end;
Image1.Picture.Assign(NeuesBild); //Image1:=NeuesBild
BildKopie.Free;
NeuesBild.Free;
end;
Danke im Voraus
Gruß OnlyOne