WinFuture-Forum.de: [delphi]tbitmap Um 90 Grad Drehen - WinFuture-Forum.de

Zum Inhalt wechseln

Nachrichten zum Thema: Entwicklung
Seite 1 von 1

[delphi]tbitmap Um 90 Grad Drehen


#1 Mitglied ist offline   pchero 

  • Gruppe: aktive Mitglieder
  • Beiträge: 261
  • Beigetreten: 10. Dezember 05
  • Reputation: 0

geschrieben 19. Januar 2008 - 20:03

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.


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
0

Anzeige



Thema verteilen:


Seite 1 von 1

1 Besucher lesen dieses Thema
Mitglieder: 0, Gäste: 1, unsichtbare Mitglieder: 0