2 Stimmen

Laufzeitkonvertierung eines Icons in eine ImageSource

Ich habe eine Anwendung geschrieben, die Dateisymbole vom Betriebssystem abruft und sich an sie bindet, aber da System.Drawing.Icon Objekte können nicht verwendet werden als ImageSource in der Bild Kontrolle, musste ich eine Konverter .

Nach einigem Suchen bin ich auf den folgenden Code gestoßen, den ich im Moment verwende:

public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
    Icon ico = (value as Icon);
    Bitmap bits = ico.ToBitmap();
    MemoryStream strm = new MemoryStream();

    // add the stream to the image streams collection so we can get rid of it later
    _imageStreams.Add(strm);
    bits.Save(strm, System.Drawing.Imaging.ImageFormat.Png);
    BitmapImage bitmap = new BitmapImage();
    bitmap.BeginInit();
    bitmap.StreamSource = strm;
    bitmap.EndInit();

    // freeze it here for performance
    bitmap.Freeze();
    return bitmap;
}

und ich habe drei Fragen:

  1. Gibt es eine bessere Lösung, die Sie vorschlagen können?

  2. Was ist der beste Weg, um die MemoryStream s verwendet, da der Code hier automatisch durch das Bindungssystem aufgerufen wird? (Sie werden nie manuell instanziiert, wie Sie vielleicht bemerken, füge ich die Streams zu einer Sammlung hinzu, wo ich die Close() im Destruktor, aber ich denke nicht, dass dies eine gute Lösung ist).

  3. Im Zusammenhang mit der vorherigen Frage: Wenn ich versuche, den Stream vor dem Ende der Funktion zu schließen, erscheint das Bild leer, auch wenn ich die Stream.Flush() davor. Warum ist das so?

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X