AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia PNG - Image mit Transparenz in Clipboard

PNG - Image mit Transparenz in Clipboard

Ein Thema von geesmith · begonnen am 27. Mär 2014 · letzter Beitrag vom 14. Dez 2018
Antwort Antwort
Seite 1 von 2  1 2   
geesmith

Registriert seit: 17. Jan 2003
Ort: Frauenfeld
32 Beiträge
 
Delphi XE5 Architect
 
#1

PNG - Image mit Transparenz in Clipboard

  Alt 27. Mär 2014, 18:30
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;
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
38.276 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: PNG - Image mit Transparenz in Clipboard

  Alt 27. Mär 2014, 18:38
Wie/Wo liest du denn das Bild aus dem Clipboard wieder aus?

Vielleicht isses ja doch drin, aber das Zielprogramm macht es kaputt.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
Delphi-Tage 2005-2014
  Mit Zitat antworten Zitat
Perlsau
(Gast)

n/a Beiträge
 
#3

AW: PNG - Image mit Transparenz in Clipboard

  Alt 27. Mär 2014, 18:58
Wenn du das PNG-Bild innerhalb derselben Anwendung kopieren willst, brauchst du kein Clipboard.
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
8.379 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: PNG - Image mit Transparenz in Clipboard

  Alt 27. Mär 2014, 19:48
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.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
geesmith

Registriert seit: 17. Jan 2003
Ort: Frauenfeld
32 Beiträge
 
Delphi XE5 Architect
 
#5

AW: PNG - Image mit Transparenz in Clipboard

  Alt 27. Mär 2014, 20:59
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.

Geändert von geesmith (27. Mär 2014 um 21:02 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
7.918 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: PNG - Image mit Transparenz in Clipboard

  Alt 28. Mär 2014, 10:58
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;
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
38.276 Beiträge
 
Delphi 10.4 Sydney
 
#7

AW: PNG - Image mit Transparenz in Clipboard

  Alt 28. Mär 2014, 11:07
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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
Delphi-Tage 2005-2014
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
8.379 Beiträge
 
Delphi 10.4 Sydney
 
#8

AW: PNG - Image mit Transparenz in Clipboard

  Alt 28. Mär 2014, 11:21
Ich glaube mich zu erinnern, dass sogar Excel 2003 schon das PNG Format unterstützt hat.
Probieren geht bekanntlich über studieren. Meine Aussage stützt sich lediglich auf diese Auflistung: Excel Clipboard Formats
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
7.918 Beiträge
 
Delphi 10.4 Sydney
 
#9

AW: PNG - Image mit Transparenz in Clipboard

  Alt 28. Mär 2014, 11:26
Ausprobiert habe ich es übrigens mit Excel 2010, da geht es.

Für die Programme, welche PNG nicht können, könnte man ja zusätzlich noch das Bitmap anbieten.
Das ist auch wichtig, ja.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
geesmith

Registriert seit: 17. Jan 2003
Ort: Frauenfeld
32 Beiträge
 
Delphi XE5 Architect
 
#10

AW: PNG - Image mit Transparenz in Clipboard

  Alt 28. Mär 2014, 21:18
Wow, echt cool. Das funktioniert!

An TMemoryStream hatte ich nicht gedacht.

Vielen Dank jaenicke!
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 +2. Es ist jetzt 05:09 Uhr.
Powered by vBulletin® Copyright ©2000 - 2021, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf