Einzelnen Beitrag anzeigen

Benutzerbild von TOC
TOC

Registriert seit: 5. Jan 2005
Ort: Trier
248 Beiträge
 
Delphi 7 Personal
 
#3

Re: Graphics32 - Transformation

  Alt 19. Mär 2007, 16:10
Hi Simlei!

Wir haben scheinbar ein ähnliches Problem. Ich hab mir die Graphics32 gestern erst runtergeladen und bin noch ganz am Anfang, aber das mit der Transformation in ein Quatrilateral (Eine Fläche mit 4 Seiten) geht in etwa so:

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, GR32, GR32_Image, GR32_Transforms, StdCtrls;

type
  TForm1 = class(TForm)
    Src: TImage32;
    Dst: TImage32;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
  private
    PT: TProjectiveTransformation;
  public
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  PT:=TProjectiveTransformation.Create;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  PT.Free;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  // Erstmal 4 Punkte definieren für das vierseitige konvexe Ziel-Polygon
  // Reihenfolge Oben/Linke, Oben/Rechts, Unten/Rechts, Unten/Links
  PT.X0:=50;
  PT.Y0:=20;
  PT.X1:=Src.Bitmap.Width-50;
  PT.Y1:=20;
  PT.X2:=Src.Bitmap.Width-10;
  PT.Y2:=Src.Bitmap.Height-10;
  PT.X3:=10;
  PT.Y3:=Src.Bitmap.Height-10;

  // Wichtig: Man muss in TProjectiveTransformation die Grösse
  // des Quell-Rechtecks definieren!
  PT.SrcRect:=FloatRect(0.0,0.0,Src.Bitmap.Width,Src.Bitmap.Height);
  // Breite und Höhe der Ziel-Bitmap setzen
  Dst.Bitmap.Width:=Src.Bitmap.Width;
  Dst.Bitmap.Height:=Src.Bitmap.Height;
  Dst.BeginUpdate;
    // Verformen
    Transform(Dst.Bitmap,Src.Bitmap,PT);
  Dst.EndUpdate;
  // und Anzeigen
  Dst.Invalidate;
end;

end.
Mein Testprogramm kannst Du Dir aus diesem Thread herunterladen : Wie kann man eine Bitmap in ein Trapez blitten

Aber Frag mich jetzt bitte nicht wie man verhindern kann das er die nichtbenutzen Bereiche mit Schwarz und Weiss auffüllt, ich hab noch nicht herausgefunden wie man ein Image transparent blitten kann, ich hab die Graphics32 ja erst seit gestern!

Grüsse von TOC!
Lars Uwe Hohmann
"Wäre die Erde eine Bank, ihr hättet sie längst gerettet!"
(Zitat GreenPeace)
  Mit Zitat antworten Zitat