Ich versuche, die Windows.ApplicationModel.DataTransfer.Clipboard Klasse zur Verfügung zu UWP Apps zu verwenden Inhalt der Zwischenablage (besonders daran interessiert, Einfügen von Bilddaten) zu lesen.Erste große Daten aus der Zwischenablage
Hier ist mein Beispielcode:
var clipboardContent = Clipboard.GetContent();
if (clipboardContent.Contains(StandardDataFormats.Bitmap))
{
var bitmap = await clipboardContent.GetBitmapAsync();
if (bitmap != null)
{
var stream = (await bitmap.OpenReadAsync()).AsStream();
// do something with the data in the stream
}
}
Dies funktioniert für relativ kleine Bilder in Ordnung. Aber wenn das Bild groß ist, dann clipboardContent.GetBitmapAsync() eine Ausnahme aus:
Eine Ausnahme des Typs ‚System.Runtime.InteropServices.COMException‘ in mscorlib.ni.dll aufgetreten war aber nicht in dem Benutzer behandelt Code
WinRT-Information: Das CF_BITMAP-Format, das von der Quell-App bereitgestellt wird, kann nicht in ein Stream-Objekt konvertiert werden.
Weitere Informationen: Für ist kein vollständiger Speicher verfügbar.
Ein Beispiel eines Bildes, das bewirkt, dass dies http://eoimages.gsfc.nasa.gov/images/imagerecords/79000/79765/dnb_land_ocean_ice.2012.13500x13500.A1.jpg
Auch wenn das Bild ist ~ 9,5 MB, wenn Sie es in einem Browser öffnen, und kopieren Sie sie in die Zwischenablage und dann versuchen, es in eine Paste UWP-App mit dem oben genannten Code, dann werden Sie das Problem mit nicht genügend Speicher auftreten.
Gibt es eine Möglichkeit, dies zu umgehen?
Ich kann Ihr Problem nicht reproduzieren. Ich teste mit deinem Code und dem Bild, das du geliefert hast, es funktioniert gut in meiner Seite. Können Sie Einzelheiten zu Ihrer Testumgebung angeben? –
Ich habe ein WebView, das eine Seite mit CKEditor + JavaScript auf dieser Seite hostet, die Einfügeaktionen erkennt und window.external.notify verwendet, um meinen C# -Code zu benachrichtigen. Ich führe dann den obigen Code aus, um die eingefügten Bilddaten zu laden, sie zu manipulieren und sie dann in den CKEditor innerhalb von WebView einzufügen. Ich denke, es hängt auch davon ab, wie viel freie mem eine Maschine hat.Ich lief auf einem Surfpro Gerät mit mehreren laufenden Apps (einschließlich Visual Studio). Ich dachte, GetBitmapAsync() würde mir erlauben, die Zwischenablage Daten kleine Stücke auf einmal zu lesen, egal wie groß es ist. Aber so scheint es nicht! –