wir machen grade im Informatik Unterricht ein bisschen Delphi, und momentan sollen wir ein TBitmap um 90 Grad drehen. Es geht momentan nicht um Performance usw usf... Sondern einfach nur den schüler damit vertraut zu machen . Deswegen wird auch die Pixel weise zuweisung verwendet. und nicht Scanlines oder so.
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Menus; type TForm1 = class(TForm) MainMenu1: TMainMenu; Datei1: TMenuItem; Bearbeiten1: TMenuItem; ffnen1: TMenuItem; Speichern1: TMenuItem; Beenden1: TMenuItem; OpenDialog1: TOpenDialog; N90Drehen1: TMenuItem; Spiegeln1: TMenuItem; SaveDialog1: TSaveDialog; Speichernunter1: TMenuItem; Leeren1: TMenuItem; procedure ffnen1Click(Sender: TObject); procedure N90Drehen1Click(Sender: TObject); procedure Leeren1Click(Sender: TObject); procedure FormClick(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; bild: Tbitmap; bild1: Tbitmap; implementation {$R *.dfm} procedure TForm1.ffnen1Click(Sender: TObject); var x,y : Integer; begin OpenDialog1.Execute; bild := Tbitmap.Create; bild1 := Tbitmap.Create; bild.LoadFromFile(OpenDialog1.FileName); {bild1.LoadFromFile(OpenDialog1.FileName);} for y:=1 to bild.Height do for x:=1 to bild.Width do form1.Canvas.Pixels[x,y] := bild.Canvas.Pixels[x,y]; Speichern1.Enabled:=True; Speichernunter1.Enabled:=True; Bearbeiten1.Enabled:=True; Form1.Width:=bild.Width+50; Form1.Height:=bild.Height+50; end; procedure TForm1.N90Drehen1Click(Sender: TObject); var x,y : Integer; begin bild1.Assign(bild); //Duplizieren bild1.Width:=bild.Height; //Neu Größe bild1.Height:=bild.Width; Form1.Width:=bild1.Width+50; //TForm1 der Bildgröße anpassen Form1.Height:=bild1.Height+50; with Canvas do FillRect(ClipRect); //TForm Leeren for y:=1 to bild.Height do //Bild drehen for x:=1 to bild.Width do bild1.Canvas.Pixels[x,bild1.Height-y-1] := bild.Canvas.Pixels[y,x]; for y:=1 to bild1.Height do //Bild darstellen lassen for x:=1 to bild1.Width do form1.Canvas.Pixels[x,y] := bild1.Canvas.Pixels[x,y]; bild.Assign(bild1); //Bild zurückspielen end; procedure TForm1.Leeren1Click(Sender: TObject); begin with Canvas do FillRect(ClipRect); Speichern1.Enabled:=False; Speichernunter1.Enabled:=False; Bearbeiten1.Enabled:=False; bild1.Free; bild.Free; end; procedure TForm1.FormClick(Sender: TObject); var x,y : Integer; begin if OpenDialog1.FileName <> '' then begin for y:=1 to bild.Height do for x:=1 to bild.Width do form1.Canvas.Pixels[x,y] := bild.Canvas.Pixels[x,y]; end; end; end.
Es geht momentan nur um das drehen von 90 Grad und das soll auch mehrfach möglich sein
Das problem ist einfach , das wenn ein Bild nicht Quadratisch ist Ecken abgeschnitten werden.
MFG