Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi stretch-Informationen in TGraphic-Object (https://www.delphipraxis.net/145409-stretch-informationen-tgraphic-object.html)

flippinho 31. Dez 2009 09:46


stretch-Informationen in TGraphic-Object
 
hallo,

ich habe folgendes Problem:
ich möchte eine TGraphic-Komponente schreiben, mit deren Hilfe ich SVG-Grafiken in einem TImage-Objekt anzeigen kann. Das funktioniert soweit auch ganz gut allerdings, allerdings finde ich auf TGraphic-Ebene keinen Zugriff auf die Stretchinformationen des beinhaltenden TImage (oder TPaintbox oder was auch immer)-Objekt. Diese Information benötige ich aber um zu entscheiden, ob die SVG-Grafik hoch oder runterskaliert werden soll oder in Original-Größe angezeigt werden soll.

Kann mir jemand helfen, wie ich in der Draw-Funktion von TGraphic an die Informationen gelange, ob das beinhaltende TImage-Objekt gestretched gezeichnet werden soll? Vielleicht ist diese Information ja irgendwie in den Parametern der Funktion "TGraphic.Draw(ACanvas: TCanvas; const Rect: TRect)" verborgen.

Vielen Dank für Eure Hilfe,
flippinho


Delphi-Quellcode:
procedure TRSVG_Graphic.Draw(ACanvas: TCanvas; const Rect: TRect);
begin
   if FExportPRsvgHandle <> nil then begin
      Export_rsvg_handle_render_cairo(FExportPRsvgHandle,
    ACanvas.handle,
         point(Rect.Right-Rect.Left,Rect.Bottom-Rect.Top),
         true );  // Stretch ja oder nein ??
   end;   
end;

s.h.a.r.k 31. Dez 2009 10:35

Re: stretch-Informationen in TGraphic-Object
 
Ich denke, du musst TGraphics um diese Eigenschaft erweitern. In der TGraphics weißt du doch gar nichts von TImage und daher auch nicht von deren Strech-Eigenschaft. Wenn du den Source der VCL hast kannst du ja schauen, was TImage intern macht und wo sich die Strech-Eigenschaft überall auswirkt.

Ich könnte mir da gut vorstellen, dass bei der Draw-Methode nicht die original Ausmaße des Bildes übergeben werden, sondern die Größe des TImage selbst.

flippinho 3. Jan 2010 10:19

Re: stretch-Informationen in TGraphic-Object
 
Hallo,

danke für die Antwort S.h.a.r.k,
ich glaube ich habe mittlerweile die Lösung zu dem Problem:
An dem Parameter "Rect" der "TGraphic.Draw(ACanvas: TCanvas; const Rect: TRect)"-Funktion kann man anscheinend erkennen, ob das TImage gestretched gezeichnet werden soll; Wenn das TImage nicht gestretched gezeichnet werden soll, entspricht die Größe von "Rect" anscheinend immer der Orginalgrösse der zu zeichnenden Grafikdatei.

falls ich nicht irgendwas übersehen habe denke ich ist das Problem gelöst.

schöne Grüsse,
flippinho





Delphi-Quellcode:
procedure TRSVG_Graphic.Draw(ACanvas: TCanvas; const Rect: TRect);
var
   lStretch : Boolean;
begin
   if (Rect.Right-Rect.Left = GetWidth) and
      (Rect.Bottom-Rect.Top = GetHeight) then begin
      lStretch := false;
   end else begin
      lStretch := true;
   end;

   if FExportPRsvgHandle <> nil then begin
      Export_rsvg_handle_render_cairo(FExportPRsvgHandle,
            ACanvas.handle,
             point(Rect.Right-Rect.Left,Rect.Bottom-Rect.Top),
             lStretch );
   end;
   
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:40 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz