So Kopieren Sie die Bitmap.Bild in c#

Habe ich einige Probleme mit speichern eines Bildes aus memorystream.

Hier ist mein code:

MemoryStream ms = new MemoryStream(onimg);

if (ms.Length > 0)
{
    Bitmap bm = new Bitmap(ms);
    returnImage = (Image)bm.Clone();
}
ms.Close();
returnImage.Save(@"C:\img.jpeg");

Und auf returnImage.Save ich habe die folgende Ausnahme:

A generic error occurred in GDI+.

Wenn ich nicht in der Nähe der MemoryStream alles OK ist, aber das erfordert sehr viel Speicher nach einiger Zeit.

Wie kann ich dies tun?

EDIT:Das Speichern ist nur die Demo.. ich muss wirklich returnImage für es in ObservableCollection und Anzeige in Fenster, wenn ich es Brauche konvertieren System.Windows.Media.Imaging.BitmapImage();

[ValueConversion(typeof(System.Drawing.Image), typeof(System.Windows.Media.ImageSource))]
public class ImageConverter : IValueConverter
{
    public object Convert(object value, Type targetType,
        object parameter, CultureInfo culture)
    {
            //empty images are empty...
            if (value == null) { return null; }

            var image = (System.Drawing.Image)value;
            //Winforms Image we want to get the WPF Image from...
            var bitmap = new System.Windows.Media.Imaging.BitmapImage();
            bitmap.BeginInit();
            MemoryStream memoryStream = new MemoryStream();
            //Save to a memory stream...
            image.Save(memoryStream, ImageFormat.Bmp);
            //Rewind the stream...
            memoryStream.Seek(0, System.IO.SeekOrigin.Begin);
            bitmap.StreamSource = memoryStream;
            bitmap.EndInit();
            return bitmap;
    }

    public object ConvertBack(object value, Type targetType,
        object parameter, CultureInfo culture)
    {
        return null;
    }
}

- Und XAML-wenn ich dies tun

<DataTemplate>
   <Image Width="32" Height="32" Source="{ Binding Thumb, Converter={StaticResource    imageConverter} }" />
</DataTemplate>
  • Was passiert, wenn Sie .Speichern, bevor Sie .Schließen Sie den MemoryStream?
  • Warum haben Sie verwenden, um ein Bitmap-Objekt? Kann Sie speichern Sie die Datei mit FileStream? Was ist onimg?
  • kann man das nicht melden das eigentliche exception-Meldung ?
  • Ich habe laufen in dieses problem vor, die Fehlermeldung ist einfach: "A generic error occurred in GDI+'. Hier finden Sie einige weitere Infos: social.msdn.microsoft.com/Forums/en-US/netfxbcl/thread/...
  • Brissles:returnImage ist eine Globale variable und muss ich es in einer anderen Klasse nach dieser Methode endet. So habe ich keine chance, um in der Nähe Memorystream, nachdem ich die Arbeit mit returnImage.
InformationsquelleAutor Aldos | 2012-01-15
Schreibe einen Kommentar