AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Bitmap aus Clipboard laden

Ein Thema von Amateurprofi · begonnen am 8. Apr 2025 · letzter Beitrag vom 22. Apr 2025
Antwort Antwort
Seite 1 von 2  1 2      
Amateurprofi

Registriert seit: 17. Nov 2005
Ort: Hamburg
1.100 Beiträge
 
Delphi XE2 Professional
 
#1

Bitmap aus Clipboard laden

  Alt 8. Apr 2025, 00:36
Ich habe eine .bmp-Datei
Die öffne ich mit Paint.
In Paint wird das Bild korrekt angezeigt (Bild_1).
Mit Ctrl-A und Ctrl-C kopiere ich die ins Clipboard,
Dann lade ich die aus dem Clipboard (siehe unten) und speichere sie.
Die gespeicherte Datei öffne ich mit Paint.
Die Datei wird angezeigt, aber mit verfälschten Farben (Bild_2).
Ähnliches passiert, wenn ich die Originaldatei mit Paint öffne, ins Clipboard kopiere und mit Photoshop aus dem Clipboard lade (Bild_3).
2 Fragen
1) Was ist der Fehler?
2) Wie kann ich herausfinden, welche Daten (Speicherauszug) tatsächlich im Clipboard sind?

Hab gerade gemerkt, das man die Bilder nicht in vergrößerter Form anzeigen kann.
Die Farben der aus dem Clipboard geladenen Bilder scheinen Systemfarben (clActiveBorder .. clWindowText) zu sein.

Prozedur zum Laden aus dem Clipboard:
Delphi-Quellcode:
PROCEDURE TMain.Test;
FUNCTION FullPath(const Dsn:String):String;
begin
   Result:=ExtractFilePath(ParamStr(0))+Dsn;
end;
var Bmp:TBitmap; Data:THandle; Palette:HPalette;
begin
   if ClipBoard.HasFormat(CF_Bitmap) then begin
      Bmp:=TBitmap.Create;
      ClipBoard.Open;
      try
         Data:=GetClipboardData(CF_BITMAP);
         Palette:=GetClipboardData(CF_PALETTE);
         Bmp.LoadFromClipboardFormat(CF_BITMAP,Data,Palette);
      finally
         ClipBoard.Close;
      end;
      Bmp.SaveToFile(FullPath('Test.bmp'));
      Bmp.Free;
   end;
end;
Angehängte Grafiken
Dateityp: jpg Bild_1.jpg (686 Bytes, 132x aufgerufen)
Dateityp: jpg Bild_2.jpg (712 Bytes, 127x aufgerufen)
Dateityp: jpg Bild_3.jpg (14,6 KB, 129x aufgerufen)
Gruß, Klaus
Die Titanic wurde von Profis gebaut,
die Arche Noah von einem Amateur.
... Und dieser Beitrag vom Amateurprofi....

Geändert von Amateurprofi ( 8. Apr 2025 um 00:47 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Sinspin
Sinspin

Registriert seit: 15. Sep 2008
Ort: Dubai
717 Beiträge
 
Delphi 10.3 Rio
 
#2

AW: Bitmap aus Clipboard laden

  Alt 8. Apr 2025, 09:54
Das ist jetzt keine Antwort auf deine Frage, aber warum öffnest Du mit Paint?
Stefan
Nur die Besten sterben jung
A constant is a constant until it change.
  Mit Zitat antworten Zitat
Benutzerbild von Gausi
Gausi

Registriert seit: 17. Jul 2005
905 Beiträge
 
Delphi 12 Athens
 
#3

AW: Bitmap aus Clipboard laden

  Alt 8. Apr 2025, 10:25
Im Beispiel-Code für LoadFromClipboardFormat in der Delphi-Hilfe wird mit "0" für den Paletten-Parameter gearbeitet. Liegt es vielleicht daran?

Für ein TPicture ist der Beispielcode ja einfach nur
Picture.LoadFromClipboardFormat(cf_BitMap, ClipBoard.GetAsHandle(cf_Bitmap), 0);
Being smart will count for nothing if you don't make the world better. You have to use your smarts to count for something, to serve life, not death.
  Mit Zitat antworten Zitat
Amateurprofi

Registriert seit: 17. Nov 2005
Ort: Hamburg
1.100 Beiträge
 
Delphi XE2 Professional
 
#4

AW: Bitmap aus Clipboard laden

  Alt 8. Apr 2025, 14:59
Im Beispiel-Code für LoadFromClipboardFormat in der Delphi-Hilfe wird mit "0" für den Paletten-Parameter gearbeitet. Liegt es vielleicht daran?

Für ein TPicture ist der Beispielcode ja einfach nur
Picture.LoadFromClipboardFormat(cf_BitMap, ClipBoard.GetAsHandle(cf_Bitmap), 0);
Danke, Gausi.

Nein ,daran liegt es nicht.
Mit 0 statt Palette machte ich es ursprünglich.
Dann sah ich dieses:
Delphi-Quellcode:
procedure TClipboard.AssignToBitmap(Dest: TBitmap);
var
  Data: THandle;
  Palette: HPALETTE;
begin
  Open;
  try
    Data := GetClipboardData(CF_BITMAP);
    Palette := GetClipboardData(CF_PALETTE);
    Dest.LoadFromClipboardFormat(CF_BITMAP, Data, Palette);
  finally
    Close;
  end;
end;
Zur Vollständigkeit:
Nach Palette := GetClipboardData(CF_PALETTE); ist Palette = 0.
Gruß, Klaus
Die Titanic wurde von Profis gebaut,
die Arche Noah von einem Amateur.
... Und dieser Beitrag vom Amateurprofi....
  Mit Zitat antworten Zitat
Amateurprofi

Registriert seit: 17. Nov 2005
Ort: Hamburg
1.100 Beiträge
 
Delphi XE2 Professional
 
#5

AW: Bitmap aus Clipboard laden

  Alt 8. Apr 2025, 14:47
Das ist jetzt keine Antwort auf deine Frage, aber warum öffnest Du mit Paint?
Aus unterschiedlichen Gründen.
Zum Bespiel, um bestimmte Bereiche eines Bildes zu entfernen.
Gruß, Klaus
Die Titanic wurde von Profis gebaut,
die Arche Noah von einem Amateur.
... Und dieser Beitrag vom Amateurprofi....
  Mit Zitat antworten Zitat
Benutzerbild von Sinspin
Sinspin

Registriert seit: 15. Sep 2008
Ort: Dubai
717 Beiträge
 
Delphi 10.3 Rio
 
#6

AW: Bitmap aus Clipboard laden

  Alt 8. Apr 2025, 18:27
Das ist jetzt keine Antwort auf deine Frage, aber warum öffnest Du mit Paint?
Aus unterschiedlichen Gründen.
Zum Bespiel, um bestimmte Bereiche eines Bildes zu entfernen.
Das geht aber auch in Delphi auch. Nur halt eventuell nicht mit Canvas, sondern der Gr32 oder was in der Art.
Stefan
Nur die Besten sterben jung
A constant is a constant until it change.
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.960 Beiträge
 
Delphi 12 Athens
 
#7

AW: Bitmap aus Clipboard laden

  Alt 8. Apr 2025, 18:31
Mit InsideClipboard kannst du die Formate sehen und den Inhalt direkt als Binärdatei speichern:
https://www.nirsoft.net/utils/inside_clipboard.html
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Amateurprofi

Registriert seit: 17. Nov 2005
Ort: Hamburg
1.100 Beiträge
 
Delphi XE2 Professional
 
#8

AW: Bitmap aus Clipboard laden

  Alt 8. Apr 2025, 21:44
Das ist jetzt keine Antwort auf deine Frage, aber warum öffnest Du mit Paint?
Aus unterschiedlichen Gründen.
Zum Bespiel, um bestimmte Bereiche eines Bildes zu entfernen.
Das geht aber auch in Delphi auch. Nur halt eventuell nicht mit Canvas, sondern der Gr32 oder was in der Art.
Das geht auch mit Canvas, aber warum erst eine Prozedur schreiben, wenn Paint das Zuschneiden von Bildern perfekt macht?
Ich könnte auch alles mit Buntstiften abmalen. Will ich aber nicht.
Gruß, Klaus
Die Titanic wurde von Profis gebaut,
die Arche Noah von einem Amateur.
... Und dieser Beitrag vom Amateurprofi....
  Mit Zitat antworten Zitat
Amateurprofi

Registriert seit: 17. Nov 2005
Ort: Hamburg
1.100 Beiträge
 
Delphi XE2 Professional
 
#9

AW: Bitmap aus Clipboard laden

  Alt 8. Apr 2025, 21:57
Mit InsideClipboard kannst du die Formate sehen und den Inhalt direkt als Binärdatei speichern:
https://www.nirsoft.net/utils/inside_clipboard.html
Danke jaenicke.
Hab ich runtergeladen.
Aber das Programm will unbedingt meinen PC reparieren und ist von dieser Idee nicht abzubringen.
Deshalb wieder gelöscht.
Gibt es keine Möglichkeit, mit Delphi an die Binärdaten heranzukommen?
Gruß, Klaus
Die Titanic wurde von Profis gebaut,
die Arche Noah von einem Amateur.
... Und dieser Beitrag vom Amateurprofi....
  Mit Zitat antworten Zitat
Benutzerbild von Sinspin
Sinspin

Registriert seit: 15. Sep 2008
Ort: Dubai
717 Beiträge
 
Delphi 10.3 Rio
 
#10

AW: Bitmap aus Clipboard laden

  Alt 9. Apr 2025, 13:16
Das geht aber auch in Delphi auch. Nur halt eventuell nicht mit Canvas, sondern der Gr32 oder was in der Art.
Das geht auch mit Canvas, aber warum erst eine Prozedur schreiben, wenn Paint das Zuschneiden von Bildern perfekt macht?
Ich könnte auch alles mit Buntstiften abmalen. Will ich aber nicht.
Weil es einfacher ist eine Bmp-Datei mit einem externen Programm zu öffnen, darin mit dem externen Programm rumzumalen, es in die Zwischenablage zu kopieren und von dort dann endlich in Delphi zu öffnen?
Das sind keine Buntstifte, das sind Tanklaster voller Farbe.

Abgesehen davon dass Du nicht steuern kannst wie Paint das Bild in die Zwischenablage schreibt, können auch alle Programm die eine Zwischenablage implementiert haben sich das Bild "heimlich" ziehen. Inclusive offene Remote Sessions (soweit nicht deaktiviert).
Stefan
Nur die Besten sterben jung
A constant is a constant until it change.
  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 19: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