none
WriteableBitmap in NetCore 5.0 RRS feed

  • Frage

  • Hallo NG,

    ich habe ein Windows Programm zur Verwaltung von Kontakten erstellt.
    Da ein Windows Programm bisher keinen Zugang zu den Windows Contacts hatte habe zur Behandlung dieser ein Universal-App erstellt, als Schnittstelle zu meiner Windows-Struktur.

    Nun eröffnet sich durch NetCore 5.0 die Möglichkeit auf die Conatcts lesend und schreibend zuzugreifen

    und beides in einem Programm vorzunehmen.

    Funktioniert soweit auch einwandfrei, bis auf eine Ausnahme, das Lesen des Bildes.

    Folgendes funktioniert in der Universal-App:

    if (sharedDataSquareLogo != null) { IRandomAccessStreamWithContentType logoStream = await sharedDataSquareLogo.OpenReadAsync(); // Create An Instance of WriteableBitmap object WriteableBitmap bitmapImage = new WriteableBitmap(99, 99); bitmapImage.SetSource(logoStream); // Aber trotzdem als SourceDisplayPicture abspeichern ruContact.sourceDisplayPicture = await ToBase64(bitmapImage); }

    ------------ private static async Task<string> ToBase64_manchmal_Fehler(WriteableBitmap bitmap) { var bytes = bitmap.PixelBuffer.ToArray(); // encode image var encoded = new InMemoryRandomAccessStream(); var encoder = await BitmapEncoder.CreateAsync(BitmapEncoder.PngEncoderId, encoded); encoder.SetPixelData(BitmapPixelFormat.Bgra8, BitmapAlphaMode.Straight, (uint)bitmap.PixelHeight, (uint)bitmap.PixelWidth, (double)96, (double)96, bytes); await encoder.FlushAsync(); // read bytes bytes = new byte[encoded.Size]; await encoded.AsStream().ReadAsync(bytes, 0, bytes.Length); // create base64 return Convert.ToBase64String(bytes); }

    In dem Windows Core Programm aber nicht mehr, weil

    WriteableBitmap bitmapImage = new WriteableBitmap(99, 99);

    zu einem Fehler führt, obgleich es laut Syntax möglich sein soll.

    Ist die ein Fehler in NetCore 5.0 oder gibt es inzwischen eine andere Möglichkeit das Bild zu lesen und anderweitig zu verwenden, z.B. zu speichern.

    Danke für die Hilfe!

    Gruß Klaus


     

    Freitag, 21. August 2020 11:03

Alle Antworten

  • Hallo Klaus,

    weil ... zu einem Fehler führt

    dann poste doch bitte die exakte und vollständige Fehlermeldung.


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET (2001-2018)
    https://www.asp-solutions.de/ - IT Beratung, Softwareentwicklung, Remotesupport

    Freitag, 21. August 2020 13:08
    Moderator
  • Hallo Stefan,

    System.Exception: Eine Schnittstelle, die für einen anderen Thread marshalled war, wurde von der Anwendung aufgerufen. (0x8001010E (RPC_E_WRONG_THREAD))
       at Windows.UI.Xaml.Media.Imaging.WriteableBitmap..ctor(Int32 pixelWidth, Int32 pixelHeight)
       at RuContact.WContacts.FillRuContactsWithWindowsContacts(Boolean Clear) in D:\Data\VS\RuContactCore\VS2019Preview\RuContact\RuContact\WindowsContact\FromWindowsContact.cs:line 373

    Hiermit kann ich aber leider nichts anfangen.

    Hätte gleich dran denken sollen!

    Gruß Klaus

    Freitag, 21. August 2020 14:56
  • Hallo Klaus,

    zu diesem Fehler mit WriteableBitmap gibt es bereits Lösungsvorschläge:

      c# winrt error 0x8001010E

    Das sollte auch bei dir helfen.


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET (2001-2018)
    https://www.asp-solutions.de/ - IT Beratung, Softwareentwicklung, Remotesupport

    Freitag, 21. August 2020 16:49
    Moderator
  • Hallo Stefan,

    leider hilft mir dein Hinweis nicht weiter. Wenn ich damit experimentiere erhalte ich z.B. folgende Fehlermeldung:

    "Es konnte keine neue Ansicht erstellt werden, weil das Hauptfenster noch nicht erstellt wurde."

    Daraufhin habe ich die ganze Logik direkt in die Windows Forms verlegt, aber auch hier ließ sich die WriteableBitmap nicht erstellen.

    Ich vermute inzwischen, das die Funktionalität durch Microsoft.Windows.SDK.Contracts in NetCore 5.0 nicht zur Verfügung steht. Da ich ja die Erstellung der Kontakte in meiner Anwendung vornehme und diese dann an Windows Contacts übertrage werde ich die Information des Kontaktbildes auf einem eigene Art in den Contacts speichern damit ich sie beim Transfer Contacts zu meiner App mühelos zurückbekomme. Damit kann ich notfalls leben.

    Sollte noch einer in der NG eine Möglichkeit finden die Bitmap der Contacts zu lesen ohne die Verwendung von WriteableBitmap oder eine andere Lösung haben, bitte ich um Info.

    Hier noch einmal was ich suche:

    Ich möchte die in den Contacts gespeicherte Bitmap in eine Windows Forms Anwendung (Core) einlesen und abspeichern.

    Ansonsten warte ich ob nicht irgendwann die Funktionalität auch in NetCore 5.0 zu Verfügung steht.

    Gruß Klaus

    Dienstag, 25. August 2020 07:46