![]() |
TImage um GDI+ erweitern
Hallo.
Ich möchte die TImage Komponente so erweitern, dass ich GDI+ Funktionen verwenden kann (AntiAliasing etc.) Gibt es ein Beispiel hierfür. Bzw. wie muß die Paint Methode aussehen? Gruß Jörg |
Re: TImage um GDI+ erweitern
Hallo und willkommen!
Was willst Du denn genau machen? Ein TImage ist ja eigentlich ein Container für Bitmap-Bilder, darauf zeichnet man nicht. Meinst Du vielleicht eine TPaintbox? Für GDI+ benötigst Du ein HDC, also z.B. Canvas.Handle. Ich hoffe, das hilft Dir weiter. Gruß xaromz |
Re: TImage um GDI+ erweitern
Hallo.
Erstmal Danke für die Antwort. Also ich habe eine von TImage abgeleitete Komponente. Und ich möchte auf das dem TImage zugewiesene Bild zum Beispiel AntiAliasing anwenden und hierfür die Funktionen von GDI+ verwenden. So, dass ich wenn ich das TImage (bzw. die abgeleitete Komponente) auf mein Form lege und ein Bild zuweise per Property sagen kann, das AntiAliasing angeschaltet werden soll bzw weitere Funkionen von GDI+ steuern kann. Ist das möglich? Wenn ja ,wie? Vielen Dank schonmal für die Mühe Gruß Jörg |
Re: TImage um GDI+ erweitern
Hallo,
ich glaube, Du musst etwas grundsätzlicher erklären: Was willst Du genau machen? Wozu eine Ableitung von TImage? Was willst Du antialiased zeichnen? Vielleicht kommen wir nach der Beantwortung dieser Fragen etwas weiter. Gruß xaromz |
Re: TImage um GDI+ erweitern
Hallo.
Ok, vielleicht hab ich da auch nen Denkfehler :-( Also, ich hab ein TImage auf einem Form. Zur Laufzeit lade ich ein Bild:
Delphi-Quellcode:
So und jetzt möchte ich sowas machen
myImage : TImage;
... begin Pic := TPicture.Create; Pic.LoadFromFile( sDateiname); myImage .Picture := Pic; // Noch was zoomen etc. FreeAndNil(Pic); ... end;
Delphi-Quellcode:
Hoffe, es ist jetzt verständlich geworden?
myImage : TMyImage; //abgeleitet von TImage
begin Pic := TPicture.Create; Pic.LoadFromFile( sDateiname); myImage.AntiAliasing := True; // AntiAliasing einschalten myImage.Picture := Pic; // Noch was zoomen etc. FreeAndNil(Pic); end; Ist das so überhaupt möglich? Gruß Jörg |
Re: TImage um GDI+ erweitern
Die Graphics32 enthalten ein TImage32, das vieles solcher Sachen kann.
|
Re: TImage um GDI+ erweitern
Hallo.
Danke erstmal. Hab mir die Graphics32 mal angesehen. Auf den ersten Blick, das was ich suche. Werd´s mal einbauen. Gruß Jörg |
Re: TImage um GDI+ erweitern
Hallo.
Ich nochmal ;) War leider doch nicht das, was ich brauche. Folgender Hintergund: Ich muß Bilder, die Textdokumente enthalten anzeigen, und brauche hierfür AntiAliasing, damit die Schrift auch beim Zoomen noch gut aussieht. Wenn noch jemand ne Idee hat, wie ich das ohne großen Aufwand (selbstberechnen) hinkriege, würde ich mich über eine Antwort freuen. Gruß Jörg |
Re: TImage um GDI+ erweitern
Hallo.
So, falls es jemanden interessiert, hab mich jetzt mal weiter mit der Sache beschäftigt. Und, siehe da, ich kann GDI+ Funktionen in der Paint Methode von TMyImage (abgeleitet von TImage) aufrufen ;-) Soweit, so gut, allerdings wird immer trotzdem das "normale" Image unter dem GDI+ Image gezeichnet. Durch das inherited, klar. Laß ich das aber weg, wird nichts mehr dargestellt :-( Hier muß es doch auch eine Lösung geben, oder? Sorry, für die blöden Fragen, aber mit Komponentenentwicklung stehe ich auf Kriegsfuß ;-)
Delphi-Quellcode:
Gruß
procedure TMyImage.Paint;
var graphics : TGPGraphics; Image: TGPImage; begin if UseGDIPlus then begin graphics := TGPGraphics.Create(self.Picture.Bitmap.Canvas.Handle); Image:= TGPImage.Create(self.PictureResource.Dateiname); // <- Picture Source ist eine Erweiterung if self.AutoSize then begin self.Width := Image.GetWidth; self.Height := Image.GetHeight; end; try graphics.SetSmoothingMode(Self.SmoothingMode); graphics.SetInterpolationMode(self.InterpolationMode); graphics.DrawImage(Image, 0,0,self.Picture.Width,self.Picture.height); inherited; finally if assigned( Image) then Image.Free; if assigned( graphics) then graphics.Free; end; end else inherited; end; Jörg |
Re: TImage um GDI+ erweitern
Hier die fertige Version. Falls es jemanden interessiert.
Hab zwar noch keine Möglichkeit gefunden, die Grafik aus TImage.Picture zu übernehmen, somit erfolgt die Auswahl über den Dateinamen. Gruß Jörg
Delphi-Quellcode:
procedure TMyImage.Paint;
var graphics : TGPGraphics; Image: TGPImage; begin if UseGDIPlus and (self.ComponentState <> [csDesigning]) and (self.PictureResource.Dateiname <> '') then begin graphics := TGPGraphics.Create(GetDC(self.Parent.Handle)); Image:= TGPImage.Create(self.PictureResource.Dateiname); try graphics.SetSmoothingMode(Self.SmoothingMode); graphics.SetInterpolationMode(self.InterpolationMode); graphics.DrawImage(Image, self.Left ,self.Top,self.width-1,self.height-1); finally if assigned( Image) then Image.Free; if assigned( graphics) then graphics.Free; end; end else inherited; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:49 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz