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: 264
  • 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



#2 Mitglied ist offline   Gast 

  • Gruppe: aktive Mitglieder
  • Beiträge: 818
  • Beigetreten: 02. September 07
  • Reputation: 22

geschrieben 24. Januar 2008 - 13:01

Hallo pchero

Das Problem liegt hier:
for y:=1 to bild.Height do		 //Bild drehen
for x:=1 to bild.Width do

Du mußt die Breite/Höhe von bild1 nehmen:
for y:=1 to bild1.Height do		 //Bild drehen
for x:=1 to bild1.Width do

Ausserdem solltest du die Breite u. Höhe der Form gleich nach dem Öffnen des Bildes zuweisen.
bild.LoadFromFile(OpenDialog1.FileName);
Form1.Width:=bild.Width+50;
Form1.Height:=bild.Height+50;


Dein ganzer Code ist etwas eigenartig aber du sagst ja selbst, das es dir nicht um Performance,usw geht. :imao:
Alle sagten es geht nicht, da kam einer der das nicht wusste und tat es einfach.
0

Thema verteilen:


Seite 1 von 1

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