AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi TImage um GDI+ erweitern
Thema durchsuchen
Ansicht
Themen-Optionen

TImage um GDI+ erweitern

Ein Thema von jping · begonnen am 17. Okt 2007 · letzter Beitrag vom 7. Jan 2008
Antwort Antwort
Seite 1 von 2  1 2      
jping

Registriert seit: 17. Okt 2007
12 Beiträge
 
#1

TImage um GDI+ erweitern

  Alt 17. Okt 2007, 13:35
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
  Mit Zitat antworten Zitat
xaromz

Registriert seit: 18. Mär 2005
1.682 Beiträge
 
Delphi 2006 Enterprise
 
#2

Re: TImage um GDI+ erweitern

  Alt 17. Okt 2007, 18:38
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
I am a leaf on the wind - watch how I soar
  Mit Zitat antworten Zitat
jping

Registriert seit: 17. Okt 2007
12 Beiträge
 
#3

Re: TImage um GDI+ erweitern

  Alt 19. Okt 2007, 09:51
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
  Mit Zitat antworten Zitat
xaromz

Registriert seit: 18. Mär 2005
1.682 Beiträge
 
Delphi 2006 Enterprise
 
#4

Re: TImage um GDI+ erweitern

  Alt 19. Okt 2007, 13:47
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
I am a leaf on the wind - watch how I soar
  Mit Zitat antworten Zitat
jping

Registriert seit: 17. Okt 2007
12 Beiträge
 
#5

Re: TImage um GDI+ erweitern

  Alt 19. Okt 2007, 14:42
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
  Mit Zitat antworten Zitat
Progman

Registriert seit: 31. Aug 2007
Ort: 99974 MHL
695 Beiträge
 
Delphi 10.1 Berlin Starter
 
#6

Re: TImage um GDI+ erweitern

  Alt 19. Okt 2007, 14:51
Die Graphics32 enthalten ein TImage32, das vieles solcher Sachen kann.
Karl-Heinz
Populanten von Domizilen mit fragiler, transparenter Aussenstruktur sollten sich von der Translation von gegen Deformierung resistenter Materie distanzieren!
(Wer im Glashaus sitzt sollte nicht mit Steinen werfen)
  Mit Zitat antworten Zitat
jping

Registriert seit: 17. Okt 2007
12 Beiträge
 
#7

Re: TImage um GDI+ erweitern

  Alt 22. Okt 2007, 12:54
Hallo.

Danke erstmal. Hab mir die Graphics32 mal angesehen.
Auf den ersten Blick, das was ich suche.
Werd´s mal einbauen.

Gruß
Jörg
  Mit Zitat antworten Zitat
jping

Registriert seit: 17. Okt 2007
12 Beiträge
 
#8

Re: TImage um GDI+ erweitern

  Alt 22. Okt 2007, 14:15
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
  Mit Zitat antworten Zitat
jping

Registriert seit: 17. Okt 2007
12 Beiträge
 
#9

Re: TImage um GDI+ erweitern

  Alt 23. Okt 2007, 10:17
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
  Mit Zitat antworten Zitat
jping

Registriert seit: 17. Okt 2007
12 Beiträge
 
#10

Re: TImage um GDI+ erweitern

  Alt 23. Okt 2007, 14:04
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;
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:22 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