![]() |
PNG - Image mit Transparenz in Clipboard
Hallo zusammen
Leider hat mich meine Suche durch das Internet nicht weitergebracht. Ich versuchs jetzt mal bei den Profis :). Ich erstelle ein Bild vom Typ TPngImage. Dieses Bild beinhaltet einen transparenten Bereich. Nun will ich dieses Bild mit der ganzen Transparenz in die Zwischablage nehmen, um es zB. in Excel einzufügen. Funktioniert ziemlich alles ...nur die Transparenz nimmt er nicht mit. Wenn ich das PNG speichere, dann speichert er das Bild mit Transparenz. Im Clipboard macht er das nicht. Der ganze Code ist nur testweise, war am rumprobieren. Daher viel Sinn ergibt das bmp->png nicht. Es gibt eine Methode von TPngImage :SaveToClipboardFormat. Damit komm ich aber wegen KnowHow-Mangel nicht klar. Vielleicht wäre das eine Lösung. Ausserdem habe ich von einer API-Funktion nahmens "RegisterClipboardFormat" gelsen. Ich konnte sie zwar implementieren, aber es tut sich trotzdem nichts. Vielen Dank für eure Hilfe!
Delphi-Quellcode:
uses
pngimage,Clipbrd; var bmp: TBitmap; png: TPngImage; begin bmp := TBitmap.Create; bmp.SetSize(200,200); bmp.Canvas.Brush.Color := clRed; bmp.Canvas.Rectangle( 20, 20, 160, 160 ); bmp.Canvas.Brush.Style := bsClear; bmp.Canvas.Rectangle(1, 1, 199, 199); bmp.Canvas.Brush.Color := clWhite; bmp.Canvas.Pen.Color := clRed; bmp.Canvas.TextOut( 35, 20, 'Hello transparent world'); bmp.TransparentColor := clWhite; bmp.Transparent := True; png := TPngImage.Create; png.Assign( bmp ); png.SaveToFile( 'C:\test.png' ); Clipboard.Assign(png); bmp.Free; png.Free; end; |
AW: PNG - Image mit Transparenz in Clipboard
Wie/Wo liest du denn das Bild aus dem Clipboard wieder aus?
Vielleicht isses ja doch drin, aber das Zielprogramm macht es kaputt. |
AW: PNG - Image mit Transparenz in Clipboard
Wenn du das PNG-Bild innerhalb derselben Anwendung kopieren willst, brauchst du kein Clipboard.
|
AW: PNG - Image mit Transparenz in Clipboard
Wenn du ein PngImage in das Clipboard schreibst, dann wird das dort als simple Bitmap abgelegt. Dabei geht die Transparenz bzw. das Alphablend verloren.
Übrigens verwendet Clipboard.Assign indirekt genau die Methode SaveToClipboardFormat. Selbst wenn du jetzt ein Clipboardformat registrieren würdest, das PNG unterstützt, dann müsste dieses Format ja auch im Zielprogramm implementiert sein. Für Excel ist das aber soweit ich weiß nicht der Fall. |
AW: PNG - Image mit Transparenz in Clipboard
Uwe hat recht... icht hab nach einer Applikation gesucht in der ich per Cut and Paste ein Bild mit Transparenz rüber nehmen kann. Ich hatte nicht realisiert, dass ich das noch nie gesehen habe. Danke für die Aufklärung.
@Perlsau Ich habe Excel geöffnet und möchte von einem parallel laufenden Delphiprogramm ein Bild mit Transparenz ins Excel übernehmen. Das ist das Ziel. @himitsu Interessanter Gedanke ...denke aber mittlerweile dass Clipboard das gar nicht kann (siehe Comment von Uwe) Ich glaube ich kann das Ziel nicht erreichen. |
AW: PNG - Image mit Transparenz in Clipboard
Das ist kein Problem. Ich glaube mich zu erinnern, dass sogar Excel 2003 schon das PNG Format unterstützt hat. Kopieren geht auch sehr einfach über die API (im Test mit einem TImage namens Image1 mit einem geladenen PNG):
Delphi-Quellcode:
var
DataStream: TMemoryStream; Data: Pointer; DataHandle: THandle; ClipboardFormat: Integer; begin // Das Format sollte man natürlich eher nur beim Start der Anwendung einmal registrieren ClipboardFormat := RegisterClipboardFormat('PNG'); DataStream := TMemoryStream.Create; try // Die Bilddaten können natürlich auch direkt aus einer Datei usw. stammen Image1.Picture.Graphic.SaveToStream(DataStream); DataHandle := GlobalAlloc(GMEM_DDESHARE, DataStream.Size); Data := GlobalLock(DataHandle); try DataStream.Position := 0; DataStream.ReadBuffer(Data^, DataStream.Size); finally GlobalUnlock(DataHandle); end; Clipboard.Open; Clipboard.SetAsHandle(ClipboardFormat, DataHandle); Clipboard.Close; finally DataStream.Free; end; |
AW: PNG - Image mit Transparenz in Clipboard
Für die Programme, welche PNG nicht können, könnte man ja zusätzlich noch das Bitmap anbieten.
In das Clipboard passen ja gleichzeitig mehrere Formate rein, wo sich dann jedes Ziel das aussucht, was es versteht. |
AW: PNG - Image mit Transparenz in Clipboard
Zitat:
![]() |
AW: PNG - Image mit Transparenz in Clipboard
Ausprobiert habe ich es übrigens mit Excel 2010, da geht es.
Zitat:
|
AW: PNG - Image mit Transparenz in Clipboard
Wow, echt cool. Das funktioniert!
An TMemoryStream hatte ich nicht gedacht. Vielen Dank jaenicke! :thumb: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:26 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