Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi TImage um GDI+ erweitern (https://www.delphipraxis.net/101691-timage-um-gdi-erweitern.html)

jping 17. Okt 2007 13:35


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

xaromz 17. Okt 2007 18:38

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

jping 19. Okt 2007 09:51

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

xaromz 19. Okt 2007 13:47

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

jping 19. Okt 2007 14:42

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:
  myImage : TImage;

...

begin
  Pic := TPicture.Create;
  Pic.LoadFromFile( sDateiname);
  myImage .Picture := Pic;
  // Noch was zoomen etc.
  FreeAndNil(Pic);
...
end;
So und jetzt möchte ich sowas machen
Delphi-Quellcode:
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;
Hoffe, es ist jetzt verständlich geworden?
Ist das so überhaupt möglich?

Gruß
Jörg

Progman 19. Okt 2007 14:51

Re: TImage um GDI+ erweitern
 
Die Graphics32 enthalten ein TImage32, das vieles solcher Sachen kann.

jping 22. Okt 2007 12:54

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

jping 22. Okt 2007 14:15

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

jping 23. Okt 2007 10:17

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:
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;
Gruß
Jörg

jping 23. Okt 2007 14:04

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 05:33 Uhr.
Seite 1 von 2  1 2      

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