000
04.11.2016, 20:15 Uhr
DerDuden
|
Moin Mitglieder,
ich habe leider keine passende Kategorie für dieses Thema gefunden, doch diese passt wohl am besten für das folgende Problem:
Die Ausgangssituation ist eine UWP (mehr dazu: https://msdn.microsoft.com/de-de/windows/uwp/get-started/whats-a-uwp) geschrieben in C++/CX, welche eine ins Projekt eingebetteten Bilddatei aufrufen und bearbeiten soll. Dieses soll auch angezeigt werden, doch diesen Teil lasse ich auch praktischen Gründen der Übersicht weg. Bis jetzt ist es mir schon gelungen eine Datei, die der Benutzerausgewählt hat, zu öffnen und anzuzeigen:
C++: |
{ FileOpenPicker^ SpeicherAuswahl = ref new FileOpenPicker(); SpeicherAuswahl->SuggestedStartLocation = PickerLocationId::PicturesLibrary; SpeicherAuswahl->FileTypeFilter->Append(".jpg"); create_task(SpeicherAuswahl->PickSingleFileAsync()).then([this](StorageFile^ Datei)mutable -> void { create_task(Datei->OpenAsync(FileAccessMode::Read)).then([this](IRandomAccessStream^ Strömung) -> void { create_task(BitKarteDekodierer->CreateAsync(Strömung)).then([this](BitmapDecoder^ BitKarteDekodierer2) -> void { create_task(BitKarteDekodierer2->GetSoftwareBitmapAsync()).then([this](SoftwareBitmap^ Weichware)->void { Array<uint8>^ Pufferdaten = ref new Array<uint8>(443556 * 4); // 1.108.890 bis 2.217.780 (Abmessung eines Bildes) IBuffer^ Puffer = Windows::Security::Cryptography::CryptographicBuffer::CreateFromByteArray(Pufferdaten); Weichware->CopyToBuffer(Puffer); uint8* PixelDaten = PufferZuZeiger_uint8(Puffer);
// ... Bearbeitung des Bytefeldes...
Weichware->CopyFromBuffer(Puffer); Weichware = SoftwareBitmap::Convert(Weichware, BitmapPixelFormat::Bgra8, BitmapAlphaMode::Premultiplied); Windows::UI::Xaml::Media::Imaging::SoftwareBitmapSource^ Quelle = ref new Windows::UI::Xaml::Media::Imaging::SoftwareBitmapSource();
create_task(Quelle->SetBitmapAsync(Weichware)).then([this, Quelle]() { Bild->Source = Quelle; }); }); }); }); }); }
|
Dieser Code funktioniert auch, wobei
C++: |
PufferZuZeiger_uint8
|
eine funktionierende eigene Funktion darstellt. Doch wenn ich versuche eine interne Ressource zu laden (aus dem Apppaket) wird mir einfach nur die Meldung angezeigt, dass ein Haltepunkt im Programm erreicht sei, den ich aber nicht selbst gesetzt habe. Dessen habe ich mich vergewissert, indem ich alle Haltepunkte gelöscht habe. Der Code sieht wie folgt aus:
C++: |
{ IAsyncOperation<StorageFile^>^ DateiAufgabe = StorageFile::GetFileFromPathAsync("ms-appx:\\Assets\\BilddateiTEST.jpg"); concurrency::task<StorageFile^> Aufgabe = concurrency::create_task(DateiAufgabe); .then([this](StorageFile^ InterneBilddatei) { // Ab hier wird mit dem StorageFile^-Objekt so weiter verfahen, wie bei dem voherigen Codebeispiel. }); }
|
Die Existenz der Datei und den Pfad habe ich schon überprüft. Der Fehler taucht an der Stelle auf, an dem das
C++: |
concurrency::Task<StoragFile^>^
|
-Objekt erstellt wird.
Ich habe keine Ahnung wie ich an das Problem rangehen soll und hoffe, dass hier die nötige Kompetenz vorhanden ist.
Im Voraus schonmal DANKE fürs Lesen und Antworten.
DerDuden Dieser Post wurde am 04.11.2016 um 20:18 Uhr von DerDuden editiert. |