Приложения WPF останавливается при изменении Bitmap на BitmapImage - PullRequest
1 голос
/ 10 января 2020

Я разрабатываю приложение WPF, которое поддерживает пользовательские настройки bru sh и модификацию изображений. Если пользователь вводит данные мыши, Bitmap модифицируется, преобразуется в BitmapImage и затем отображается. В большинстве случаев проблема не возникает, но приложение останавливается, когда я оставляю приложение без ввода в течение определенного времени (около 3 ~ 5 минут).

Это блок кода, который я использую для Bitmap -> BitmapImage модификация

BitmapImage BitmapToImageSource(Bitmap bitmap) {
    using (MemoryStream memory = new MemoryStream()) {
        bitmap.Save(memory, System.Drawing.Imaging.ImageFormat.Png);
        memory.Position = 0;
        BitmapImage bitmapimage = new BitmapImage();
        bitmapimage.BeginInit();
        bitmapimage.StreamSource = memory;
        bitmapimage.DecodePixelWidth = bitmap.Width;
        bitmapimage.DecodePixelHeight = bitmap.Height;
        bitmapimage.CacheOption = BitmapCacheOption.OnLoad;
        bitmapimage.EndInit();
        return bitmapimage;
    }
}

Приложение останавливается на

bitmap.save(memory, System.Drawing.Imaging.ImageFormat.Png);

Код для отображения BitmapImage

myWindow.myImageName.Source = BitmapToImageSource(myBitmap);
//I work at different class from .xaml.cs

Однако, это не выдает ошибку. Приложение просто останавливается и не работает.

Есть ли какая-либо проблема, связанная с тем, что растровые данные не сохраняются в потоке памяти? Или есть ли способы отображения растрового изображения в изображение WPF без сохранения растрового изображения в памяти?

1 Ответ

0 голосов
/ 10 января 2020

Проверьте, работает ли этот код для вас

  BitmapImage BitmapToImageSource(Bitmap bitmap)
{
    using (MemoryStream memory = new MemoryStream())
    {
        bitmap.Save(memory, System.Drawing.Imaging.ImageFormat.Bmp);
        memory.Position = 0;
        BitmapImage bitmapimage = new BitmapImage();
        bitmapimage.BeginInit();
        bitmapimage.StreamSource = memory;
        bitmapimage.CacheOption = BitmapCacheOption.OnLoad;
        bitmapimage.EndInit();

        return bitmapimage;
    }
}
...