none
JPG Image File ins Clipboard in WPF RRS feed

  • Frage

  • Hallo Forum,

    ich versuche eine JPG-Datei ins Clipboard zu bekommen.

    Mein Weg bisher war:
    - JPG lesen als ByteArray 
    - das ByteArray in ein BitmapImage umwandeln
    - und dann an das Clipboard geben "Clipboard.SetImage(img);"

    Das funktioniert auch, aber aus 3.1MB werden dann fast 45MB, da es in ein Bitmap umgewandelt wird. Mit diesem Source wandele ich das ByteArray in ein BitmapImage um.

    private BitmapImage LoadImage(byte[] imageData)
            {
                if (imageData == null || imageData.Length == 0)
                {
                    return null;
                }
    
                var image = new BitmapImage();
                using (var mem = new MemoryStream(imageData))
                {
                    mem.Position = 0;
                    image.BeginInit();
                    image.CreateOptions = BitmapCreateOptions.PreservePixelFormat;
                    image.CacheOption = BitmapCacheOption.OnLoad;
                    image.UriSource = null;
                    image.StreamSource = mem;
                    image.EndInit();
                }
    
                image.Freeze();
                return image;
            }

    Gibt es nun eine Möglichkeit ein JPG in das Clipboard (unter WPF) zu bekommen und die ursprüngliche Größe erhalten bleibt.

    Danke und Gruß
    Gerhard

    Freitag, 19. Januar 2018 13:29

Antworten

Alle Antworten

  • Hallo,

    eventuell bringt es was, das Bild direkt in ein Image zu wandeln:

    Image imgSave = Image.FromStream(ms);



    • Bearbeitet Hartl_D Freitag, 19. Januar 2018 20:46
    Freitag, 19. Januar 2018 20:45
  • Hallo Gerhard,

    man könnte das jpg auch als base64sting weiter geben. Aber woher soll ein anders Programm wissen was das soll. Wenn Du so nur unter deinen Programmen Daten austauschen willst, kannst Du das machen. Willst Du das andere Programme das verstehen, solltest Du dich an die Vorgaben halten.

    JPG ist vergleichbar mit Zip also ein komprimiertes Format. Pakt man dieses aus und stellt es als Bitmap zur Verfügung, reserviert jedes Pixel 3 oder 4 byte (24-32 bit) (4 mit Alpha). Dies ist dann auch die einfachste Form mit der viele andere Programme und Programmiersprachen zureckt kommen.


    Gruß Thomas
    Sage nie, ich kann es nicht - sage nur, ich kann es noch nicht!
    Dev Apps von mir: Icon für UWP,  UI Strings
    Andere Dev Apps: UWP Community Toolkit Sample App

    Freitag, 19. Januar 2018 21:17
  • Hi Gerhard,
    die Zwischenablage sieht keine Ablage eines Byte-Streams als jpg vor. Schau Dir dazu mal die möglichen Datenformate an. Entweder die Daten werden z.B. als InteropBitmap oder ganz kurz nur als Dateiname einer jpg-Datei im Dateisystem übergeben.

    --
    Viele Grüsse
    Peter Fleischer (ehem. MVP)
    Meine Homepage mit Tipps und Tricks

    Samstag, 20. Januar 2018 10:41
  • Hallo zusammen,

    gut, bzw. nicht so gut. Dann werde ich diesen Teil wohl tatsächlich als InteroptBitmap. bzw. über die Win32-Api lösen.

    Schade das auch die Frameworkversion 4.7 immer noch so viele Lücken aufweist, gerade im Bereich Grafik, Clipboard usw. die wohl nie geschlossen werden. 

    Danke und Gruß
    Gerhard

    Montag, 22. Januar 2018 07:23
  • Hi Gerhard,
    wo siehst Du eine Lücke im Framework?

    ClipBoard ist eine Funktionalität des Betriebssystem und es wird im Framework das gekapselt, was das Betriebssystem bereitstellt.


    --
    Viele Grüsse
    Peter Fleischer (ehem. MVP)
    Meine Homepage mit Tipps und Tricks

    Montag, 22. Januar 2018 07:32
  • Hallo Peter,

    mag sein, das ich das zu eng sehe, aber immer wenn ich eine API-Funktion oder Interopt bemühen muss um ein Ergebnis zu erzielen empfinde ich das als eine Lücke. In der Vergangenheit ist es immer wieder mal vorgekommen, das eine API oder Interopt Funktionalität nach dem Wechsel des OS oder Servicepack nicht mehr zur Verfügung stand. Ich finde es eben angenehmer, wenn Funktionalitäten über das Framework abgebildet werden.

    Übrigens, in der API Beschreibung vom Clipboard sind sehr viel mehr Funktionen, wie vom Framework gekapselt wurden.

    Gruß
    Gerhard

    Montag, 22. Januar 2018 10:43
  • Übrigens, in der API Beschreibung vom Clipboard sind sehr viel mehr Funktionen, wie vom Framework gekapselt wurden.

    Hi Gerhard,
    ich kann da zwar nicht erkennen, dass jpg-Streams so zwischengespeichert werden können, dass sie von anderen Anwendungen auch entfaltet werden. Du kannst ja mal diesbezüglich eine Routine veröffentlichen. Vielleicht können davon auch Andere profitieren.

    --
    Viele Grüsse
    Peter Fleischer (ehem. MVP)
    Meine Homepage mit Tipps und Tricks

    Montag, 22. Januar 2018 10:55
  • Grade bei Bilder sehe ich da kein Problem. Meist ist es doch wohl so das wenn man ein Bild in der Zwischenablage ablegt, man gleich weiter am Bild arbeiten will. Nur halt in einem anderem Tool. Jede Komprimierung wäre hier Zeitverwendung. 40, 100 oder auch mehr MB ist aus meiner Sicht OK. Hauptsache ich muss nicht jedes mal warten. 


    Gruß Thomas
    Sage nie, ich kann es nicht - sage nur, ich kann es noch nicht!
    Dev Apps von mir: Icon für UWP,  UI Strings
    Andere Dev Apps: UWP Community Toolkit Sample App


    Montag, 22. Januar 2018 17:54