2016-03-27 19 views
1

Ich erstelle eine einfache Bildverarbeitung App in Windows Phone 8.1, die die Accord.net tragbare Bibliothek verwendet (Windows Phone 8.1 Accord.net tragbare Bibliothek verwenden). Mein Hauptziel ist es, ein farbiges Bild aus meiner Bilderbibliothek (die in .jpeg sind) mit Graustufen zu filtern. Die Accord.net Portable-Bibliothek ermöglicht die Verwendung Bitmap in Windows Phone, die unter System.Drawing ist, so dass ich Bildverarbeitungsverfahren durchführen konnte.Konvertieren von Bitmap zu Bitmap

Das Problem ist, ich Open File Picker bin mit, die Bitmap verwendet, wenn Bilder aus der Bilder-Bibliothek abgerufen werden. Hier ist mein Code dafür:

public async void ContinueFileOpenPicker(FileOpenPickerContinuationEventArgs args) 
    { 
     if (args.Files != null) 
     { 
      StorageFile file = args.Files[0]; 
      bitmapImage = new BitmapImage(); 

      using (var stream = await file.OpenReadAsync()) 
      { 
       await bitmapImage.SetSourceAsync(stream); 
      } 
     } 
     img_Original.Source = bitmapImage; 
    } 

Die Probe Grayscale.cs-Klasse in https://github.com/cureos/accord/blob/portable/Sources/Accord.Imaging/AForge/Filters/Color%20Filters/Grayscale.cs sagt, dass ich einfach den folgenden Code verwenden kann, so dass ich die Graustufen-Filter durchführen kann:

Grayscale filter = new Grayscale(0.2125, 0.7154, 0.0721); 
Bitmap grayImage = filter.Apply(image); 

Während Bild sollte eine Art von Bitmap sein. Wie Sie sehen können, kann ich die Variable bitmapImage nicht verwenden, da es sich um eine Art BitmapImage handelt. Ein weiteres Problem ist, dass die Bitmap keinen Konstruktor enthält (anders als in WinForms). Daher habe ich wirklich keine Optionen, wie ich den Graustufenfilter auf das vorhandene Bild anwenden könnte. Eine andere Information, die helfen könnte, ist, dass, wenn ich schwebe, um zu filter.Apply Konstruktor ist, dass es andere Dateitypen als das Bitmap enthält. Die BitmapData und UnmanagedImage. Ich habe jedoch keine Ahnung, wie diese Datentypen verwendet werden sollen.

Jede Arbeit, die ich nutzen könnte, würde sehr geschätzt werden.

+0

Siehe http://stackoverflow.com/questions/6484357/converting-bitmapimage-to-bitmap-and-vice-versa - sind die BitmapFrame-Methoden auf WP 8.1 verfügbar? – ChrisF

+0

Leider sind die meisten der in diesem Beitrag verwendeten Methoden nicht für WP 8.1 verfügbar. –

+0

Ich hatte davor Angst. – ChrisF

Antwort

1

Wie diskutiert here, müssen Sie vonWriteableBitmap werfen, bevor Sie AForge/Operationen Accord Bild anwenden, und werfen zurück -WriteableBitmap nach der Bildverarbeitungsvorgänge abgeschlossen sind.

Siehe auch this Antwort.

+0

Ohh .. Dieser Teil ist mir entfallen. Vielen Dank. Ich habe es jetzt funktioniert. Eine letzte Frage, die Evaluierungsversion von Shim.Drawing, setzt ein rotes Wasserzeichen auf mein Bild. Wenn ich eine oder mehrere Bildverarbeitungsfunktionen verwenden möchte, beeinflusst das Wasserzeichen möglicherweise das resultierende Bild? Ich werde versuchen, eine Textur Feature Extraction bei meinem nächsten Experiment zu tun. Ich denke, das Wasserzeichen kann die Texturwerte beeinflussen. Gibt es irgendwelche Arbeiten, damit nur das letzte Bild das Wasserzeichen bekommt? Ich werde die Lizenz kaufen, wenn mein Experiment gut läuft. –

+0

Das Wasserzeichen wird nur während des Cast-Vorgangs angewendet und hat keinen Einfluss auf die Bildverarbeitung.Was Sie in dem resultierenden Bild sehen, ist das tatsächlich verarbeitete Bild, plus ein Wasserzeichen darüber. –

+0

Ohh .. Ich verstehe. Danke für die Information. –