У нас есть приложение 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)
Мы не знаем, как его запуститьвозвращая черные миниатюры. Мы видели это на различных настольных компьютерах, ноутбуках и видеокартах. Поэтому мы не считаем, что проблема с оборудованием.
Есть мысли по поводу кода выше? Любые теории о том, почему это будет прерывистым?