![]() |
Bitmap aus Clipboard laden
Liste der Anhänge anzeigen (Anzahl: 3)
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; |
AW: Bitmap aus Clipboard laden
Das ist jetzt keine Antwort auf deine Frage, aber warum öffnest Du mit Paint?
|
AW: Bitmap aus Clipboard laden
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
Delphi-Quellcode:
Picture.LoadFromClipboardFormat(cf_BitMap, ClipBoard.GetAsHandle(cf_Bitmap), 0);
|
AW: Bitmap aus Clipboard laden
Zitat:
![]() Dein Problem kommt vermutlich daher, daß Du eine Palette angibst. Die meisten Bitmap-Formate verwenden aber keine, daher könnte das dazu führen, das die Bitmap als in das 256-Farben Format konvertiert wird. Die momentan verfügbaren Formate im Clipboard bekommst Du über die ![]()
Delphi-Quellcode:
{!
<summary> Get a string name for a clipboard format.</summary> <returns> the name the format was registered with, if it is a custom format, or the symbolic name for the known predefined formats. The string 'unknown format' is returned for a format that cannot be identified.</returns> <param name="fmt">is the format to get a name for.</param> } function GetClipFmtname(fmt: Cardinal): string; const MaxChars = 128; var buf: array[0..MaxChars] of Char; Len: Integer; begin Len := GetclipboardFormatName(fmt, buf, MaxChars); if Len <> 0 then SetString(Result, buf, Len) else case fmt of 1: Result := 'CF_TEXT'; 2: Result := 'CF_BITMAP'; 3: Result := 'CF_METAFILEPICT'; 4: Result := 'CF_SYLK'; 5: Result := 'CF_DIF'; 6: Result := 'CF_TIFF'; 7: Result := 'CF_OEMTEXT'; 8: Result := 'CF_DIB'; 9: Result := 'CF_PALETTE'; 10: Result := 'CF_PENDATA'; 11: Result := 'CF_RIFF'; 12: Result := 'CF_WAVE'; 13: Result := 'CF_UNICODETEXT'; 14: Result := 'CF_ENHMETAFILE'; 15: Result := 'CF_HDROP'; 16: Result := 'CF_LOCALE'; 17: Result := 'CF_DIBV5'; $0080: Result := 'CF_OWNERDISPLAY'; $0081: Result := 'CF_DSPTEXT'; $0082: Result := 'CF_DSPBITMAP'; $0083: Result := 'CF_DSPMETAFILEPICT'; $008E: Result := 'CF_DSPENHMETAFILE'; $0200..$02FF: Result := 'private format'; $0300..$03FF: Result := 'GDI object'; else Result := 'unknown format'; end; {Case} end; |
AW: Bitmap aus Clipboard laden
Zitat:
Zum Bespiel, um bestimmte Bereiche eines Bildes zu entfernen. |
AW: Bitmap aus Clipboard laden
Zitat:
Nein ,daran liegt es nicht. Mit 0 statt Palette machte ich es ursprünglich. Dann sah ich dieses:
Delphi-Quellcode:
Zur Vollständigkeit:
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; Nach Palette :=
Delphi-Quellcode:
ist Palette = 0.
GetClipboardData(CF_PALETTE);
|
AW: Bitmap aus Clipboard laden
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
Zu "Dein Problem kommt vermutlich ..." Nein. Bei dem von mir benutzten Code ist nach
Delphi-Quellcode:
Palette = 0.
Palette:=GetClipboardData(CF_PALETTE);
Zu "Die momentan verfügbaren Formate" Ich habe in den meisten meiner Programme die Möglichkeit implementiert, mir die vorhandenen Formate anzeigen zu lassen. Bei dem in #1 geschilderten Problem ist es das in Bild_4 gezeigte. Unabhängig davon: Ich habe mich vielleicht falsch ausgedrückt. Ich möchte nicht sehen, welche Formate vorhanden sind, sondern die Daten selbst. Deshalb schrieb ich "(Speicherauszug)". |
AW: Bitmap aus Clipboard laden
Ich benutze aktuellen den Befehl
Delphi-Quellcode:
. Was passiert in diesem Fall bei dem Bild?
Image1.Picture.Bitmap.Assign(Clipboard)
|
AW: Bitmap aus Clipboard laden
Zitat:
|
AW: Bitmap aus Clipboard laden
Mit InsideClipboard kannst du die Formate sehen und den Inhalt direkt als Binärdatei speichern:
![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:02 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