Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi GDI+, Grafik temporär abspeichern (https://www.delphipraxis.net/65874-gdi-grafik-temporaer-abspeichern.html)

Interflo 21. Mär 2006 17:47


GDI+, Grafik temporär abspeichern
 
Hallo,

ich beschäftige mich seit kurzem mit der GDI+ und bin auch schon ganz glücklich damit. Allerdings habe ich ein Problem:
Ich lege ein Bitmap an und versuche dort den Inhalt einer TPaintBox zu speichern. Intern in der GDI+ habe ich bisher jedoch keine möglichkeit gefunden dies zu realisieren.

Bisher versuche ich das mit der normalen GDI (vereinfachtes Beisp):
Delphi-Quellcode:
 var
  GrpGraphics: GGraphics;
  GrpTemp: GGraphics;
  BmpTemp: GBitmap;
begin
  try
    GrpGraphics := GGraphics.Create(pbMain.Canvas.Handle);
    BmpTemp := GBitmap.Create(200, 200);
    // Temp. Graphics Object um an den HDC der Bitmap ranzukommen
    GrpTemp := GGraphics.Create(BmpTemp);
    // Bereich aus der PaintBox auf das Bitmap blitten
    BitBlt(GrpTemp.GetHDC, 0, 0, 200, 200, pbMain.Canvas.Handle, 50, 50, SRCCOPY);
    GrpTemp.Free;
    // Bitmap inhalt in die PaintBox zeichnen
    GrpGraphics.DrawImage(BmpTemp, 100, 100);
  finally
    GrpGraphics.Free;
    BmpTemp.Free;
  end;
Dies funktioniert jedoch nicht und ich verstehe nicht wieso?? Es gibt einfach keine Ausgabe.

Danke im Voraus!

mfg flo

Cicaro 22. Mär 2006 13:17

Re: GDI+, Grafik temporär abspeichern
 
Da du DCs verwendest, kannst du die Grafiken auch in die normalen Bitmaps kopieren.
Delphi-Quellcode:
uses Graphics;

Bitmap:=TBitmap.Create;
// Bitmap richtig einstellen
Bitmap.PixelFormat:=pf24Bit;
Bitmap.Width:=200;
Bitmap.Height:=200;

BitBlt(Bitmap.Canvas.Handle,0,0,200,200,Dein_DC,50,50,SRCCOPY);

// und irgendwann
Bitmap.Free;
Ach, und ich galaube dein BitBlt-Aufruf ist nicht ganz richtig. Du kopierst die Grafik in ein Bitmap das du gleich danach wieder freigibst. :gruebel:

Interflo 22. Mär 2006 13:58

Re: GDI+, Grafik temporär abspeichern
 
Zitat:

Da du DCs verwendest, kannst du die Grafiken auch in die normalen Bitmaps kopieren.
Ich würde aber lieber die Bitmapklasse der GDI+ benutzen.

Zitat:

Ach, und ich galaube dein BitBlt-Aufruf ist nicht ganz richtig. Du kopierst die Grafik in ein Bitmap das du gleich danach wieder freigibst.
Nein, ich gebe nur das Graphics Objekt wieder frei nicht das Bitmap. Das Graphics object ist ja nur zum zeichnen gut, man sagt ihm was man zeichnen will und wenn man es freigibt, zeichnest es alles auf das angegebene Objekt (GrpTemp := GGraphics.Create(BmpTemp)) in dem Falle "BmpTemp".

Das Graphics-Objekt benutze ich ja nur, um den DC von dem Bitmap zu erhalten, da dies in der GDI+ (meines wissens) nicht anders geht.

Danach zeichne ich das Bitmap wieder und kann es ja dann auch wieder freigeben:
Delphi-Quellcode:
GrpGraphics.DrawImage(BmpTemp, 100, 100);
  finally
    GrpGraphics.Free;
    BmpTemp.Free;


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:55 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