AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Bitmap von DirectX will nicht in die Zwischenablage

Bitmap von DirectX will nicht in die Zwischenablage

Ein Thema von KodeZwerg · begonnen am 17. Okt 2022 · letzter Beitrag vom 17. Okt 2022
Antwort Antwort
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.568 Beiträge
 
Delphi 11 Alexandria
 
#1

Bitmap von DirectX will nicht in die Zwischenablage

  Alt 17. Okt 2022, 13:59
In dieser Post zeigte ich wie ich ein Bild erstelle.
Jetzt wollte ich etwas total simples machen, dieses Bild in die Zwischenablage einfügen um damit Global eine Möglichkeit zu haben es irgendwo einzufügen.
Bei einem TBitmap generiert mit der GDI-Technik (BitBlt) funktioniert es, bei einem TBitmap generiert mit der DirectX Variante tut sich gar nichts.
Auf diese Weise wollte ich ans Ziel kommen: (FBitmap ist ein TBitmap)
Delphi-Quellcode:
procedure TkzSnapShot.CopyToClipboard;
var
{
  DataStream: TMemoryStream;
  Data: Pointer;
  DataHandle: THandle;
}

  Image: TImage;
begin
  Image := TImage.Create(Self.Owner);
  try
    Image.Picture.Bitmap.Assign(FBitmap);
    Image.Invalidate;
    Clipboard.Assign(Image.Picture.Graphic);
  finally
    Image.Free;
  end;
(*
  //MessageBox(0, 'CopyToClipboard', 'CopyToClipboard', MB_OK);
  DataStream := TMemoryStream.Create;
  try
    FImage.SaveToStream(DataStream);

    DataHandle := GlobalAlloc(GHND or GMEM_SHARE, DataStream.Size);
    try
      Data := GlobalLock(DataHandle);
      try
        DataStream.Position := 0;
        DataStream.ReadBuffer(Data^, DataStream.Size);
      finally
        GlobalUnlock(DataHandle);
        if OpenClipboard(0) then
          begin
            EmptyClipboard;
            SetClipboardData(FClipboardFormat, DataHandle);
            CloseClipboard;
          end;
      end;
    except
      GlobalFree(DataHandle);
      Raise;
    end;
  finally
    DataStream.Free;
  end;
*)

end;
Leider funktioniert weder das reguläre noch wenn ich die Daten roh sende.
Was übersehe ich hier?
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.568 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Bitmap von DirectX will nicht in die Zwischenablage

  Alt 17. Okt 2022, 14:04
Hat sich erledigt, der Aufruf der CopyToClipboard methode hatte bei DirectX gefehlt
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
40.732 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Bitmap von DirectX will nicht in die Zwischenablage

  Alt 17. Okt 2022, 15:57
Zitat:
Delphi-Quellcode:
  Image := TImage.Create(Self.Owner);
  try
    Image.Picture.Bitmap.Assign(FBitmap);
    Image.Invalidate;
    Clipboard.Assign(Image.Picture.Graphic);
  finally
    Image.Free;
  end;
Effektiv macht dein Code das hier
Clipboard.Assign(FBitmap);

Invalidate macht nichts, das das TImage eh nicht sichtbar ist

Delphi-Quellcode:
Image := TImage.Create(Self.Owner);
try
  Image.Picture.Bitmap.Assign(FBitmap);
  Clipboard.Assign(Image.Picture.Graphic);
finally
  Image.Free;
end;
von TImage wird garnicht benutzt, also TPicture
Delphi-Quellcode:
Picture := TPicture.Create(Self.Owner);
try
  Picture.Bitmap.Assign(FBitmap);
  Clipboard.Assign(Picture.Graphic);
finally
  Picture.Free;
end;
im Graphic ist das Bitmap drin, wodurch Graphic = Bitmap,
also Clipboard.Assign(Picture.Bitmap);
Picture.Bitmap erstellt ein TBitmap (wenn/da noch Keines drin ist), und es wird unverändert als TBitmap weiterverwendet,
womit auch das TPicture praktisch garnicht verwendet wird
Delphi-Quellcode:
Bitmap := TBitmap.Create(Self.Owner);
try
  Bitmap.Assign(FBitmap);
  Clipboard.Assign(Bitmap);
finally
  Bitmap.Free;
end;
und dann kopierst du den Inhalt des einen Bitmaps nur in ein Anderes, womit das auch wegfallen könnte, weil sich doch nichts verändert,
also Clipboard.Assign(FBitmap);
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list

Geändert von himitsu (17. Okt 2022 um 16:02 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.568 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Bitmap von DirectX will nicht in die Zwischenablage

  Alt 17. Okt 2022, 16:56
@himitsu
Ich hatte im Vorfeld Deine gezeigten Variationen durchprobiert aber da scheint doch etwas anderes zu passieren weil wenn ich direkt Clipboard.Assign(FBitmap); aufrufe, ist das Bild zwar in der Zwischenablage aber ich kann es nicht von dort in andere Anwendungen rauskopieren (vielleicht in einigen aber nicht da wo ich es oft benötige), deshalb der Umweg über ein TImage/Graphic, das funktioniert dann zumindest in meinen Versuchen immer.
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
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 +1. Es ist jetzt 21:33 Uhr.
Powered by vBulletin® Copyright ©2000 - 2023, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf