Hi
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.
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
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.
Code:
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
Zuletzt bearbeitet: