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 9. Apr 2025
Antwort Antwort
Seite 2 von 2     12   
peterbelow

Registriert seit: 12. Jan 2019
Ort: Hessen
714 Beiträge
 
Delphi 12 Athens
 
#1

AW: Bitmap aus Clipboard laden

  Alt 8. Apr 2025, 10:41
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?
Sieh dir mal dieses Beispiel in der online-Hilfe an.

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 Clipboard.Formats-Property. Einen Text-Namen aus der ID des Formats liefert die folgende Routine mit Hilfe der GetclipboardFormatName API-Funktion.

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;
Peter Below
  Mit Zitat antworten Zitat
Amateurprofi

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

AW: Bitmap aus Clipboard laden

  Alt 8. Apr 2025, 15:21
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 Clipboard.Formats-Property. Einen Text-Namen aus der ID des Formats liefert die folgende Routine mit Hilfe der GetclipboardFormatName API-Funktion.
Danke peterbelow.
Zu "Dein Problem kommt vermutlich ..."
Nein.
Bei dem von mir benutzten Code ist nach Palette:=GetClipboardData(CF_PALETTE); Palette = 0.

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)".
Angehängte Grafiken
Dateityp: jpg Bild_4.jpg (63,8 KB, 25x aufgerufen)
Gruß, Klaus
Die Titanic wurde von Profis gebaut,
die Arche Noah von einem Amateur.
... Und dieser Beitrag vom Amateurprofi....
  Mit Zitat antworten Zitat
Redeemer

Registriert seit: 19. Jan 2009
Ort: Kirchlinteln (LK Verden)
1.117 Beiträge
 
Delphi 2009 Professional
 
#3

AW: Bitmap aus Clipboard laden

  Alt 8. Apr 2025, 15:42
Ich benutze aktuellen den Befehl Image1.Picture.Bitmap.Assign(Clipboard) . Was passiert in diesem Fall bei dem Bild?
Janni
2005 PE, 2009 PA, XE2 PA
  Mit Zitat antworten Zitat
Amateurprofi

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

AW: Bitmap aus Clipboard laden

  Alt 8. Apr 2025, 21:27
Ich benutze aktuellen den Befehl Image1.Picture.Bitmap.Assign(Clipboard) . Was passiert in diesem Fall bei dem Bild?
Danke Redeemer.
Hab ich probiert. Auch hier sind die Farben auf gleiche Weise verfälscht.
Hab noch einmal die Bilder in vergrößerter Form hochgeladen (Bild_5).
Links das Original, rechts das verfälschte Bild.
Angehängte Grafiken
Dateityp: jpg Bild_5.jpg (2,2 KB, 25x aufgerufen)
Gruß, Klaus
Die Titanic wurde von Profis gebaut,
die Arche Noah von einem Amateur.
... Und dieser Beitrag vom Amateurprofi....
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 15:42 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