Изображение становится черным после изменения размера (с перерывами) - PullRequest
0 голосов
/ 29 октября 2019

У нас есть приложение WPF, которое собирает изображения. Он сохраняет полноразмерное изображение (1024x1024), а также создает и сохраняет «миниатюру» 96x96. Изображение получается примерно раз в 10 секунд.

Наше приложение может работать несколько дней, и следующий код, который создает миниатюру, иногда начнет возвращать все черные миниатюры. Черные миниатюры могут продолжаться в течение нескольких часов, а затем вернуться к возвращению ожидаемого сжатого изображения. Иногда есть одна хорошая миниатюра, за которой следуют часы черных миниатюр.

public static BitmapSource ResizeImage(BitmapSource source, int newWidth, int newHeight, PixelFormat pixelFormat)
{
    var rect = new Rect(0,0, newWidth, newHeight);

    var group = new DrawingGroup();
    RenderOptions.SetBitmapScalingMode(group, BitmapScalingMode.HighQuality);
    group.Children.Add(new ImageDrawing(source, rect));

    var drawingVisual = new DrawingVisual();
    using (var drawingContext = drawingVisual.RenderOpen())
            drawingContext.DrawDrawing(group);

    var resizedImage = new RenderTargetBitmap(
                                newWidth, newHeight,       
                                96, 96,                     // Default DPI values
                                PixelFormats.Default);      // Default format

    resizedImage.Render(drawingVisual);

    var frame = BitmapFrame.Create(resizedImage);

    // Convert to the specified PixelFormat

    FormatConvertedBitmap newFormattedBitmapSource = new FormatConvertedBitmap();
    newFormattedBitmapSource.BeginInit();
    newFormattedBitmapSource.Source = frame;
    newFormattedBitmapSource.DestinationFormat = pixelFormat;
    newFormattedBitmapSource.EndInit();

    return newFormattedBitmapSource;
}

Вышеприведенный метод запускается в новой задаче с использованием (где CreateThumbnailImage в конечном итоге вызывает вышеуказанный метод ResizeImage):

Task.Factory.StartNew<SampleImage>(sample.CreateThumbnailImage)

Мы не знаем, как его запуститьвозвращая черные миниатюры. Мы видели это на различных настольных компьютерах, ноутбуках и видеокартах. Поэтому мы не считаем, что проблема с оборудованием.

Есть мысли по поводу кода выше? Любые теории о том, почему это будет прерывистым?

...