Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Windows update KB4040972/73 causes black images with WPF classes

I have an application relying on Deep zoom images (convertion from a PNG to a pyramid of JPGs in various scale) which we use DeepZoomTools.dll for. This is relying on PresentationCore.dll and has been working fine for years.

After the rollout of KB4040972 and KB4040973, the conversion from PNG to JPG generates (depending on coordinates) black images instead of the image it should contain.

If the below code is run in a console or desktop app, it works.

It ONLY doesn't work if run under high privilege SYSTEM account (e.g. from Task scheduler).

I have created a project to reproduce the issue, code below:

public static void TestConvert2(string strFileName, string strOutFileName) {
 JpegBitmapEncoder jpegBitmapEncoder = new JpegBitmapEncoder();
 jpegBitmapEncoder.QualityLevel = 1 + (int) Math.Round(0.95 * 99.0);
 BitmapEncoder encoder = jpegBitmapEncoder;

 Int32Rect inputRect = new Int32Rect(0, 0, 255, 255);
 Rect outputRect = new Rect(0, 0, 255, 255);
 Uri bitmapUri = new Uri(strFileName, UriKind.RelativeOrAbsolute);
 BitmapDecoder bitmapDecoder = BitmapDecoder.Create(bitmapUri,
  BitmapCreateOptions.PreservePixelFormat, BitmapCacheOption.OnLoad);
 bitmapDecoder = BitmapDecoder.Create(bitmapUri, BitmapCreateOptions.IgnoreImageCache, BitmapCacheOption.None);

 BitmapSource inputFrame = (BitmapSource) bitmapDecoder.Frames[0];
 BitmapSource source1 = (BitmapSource) new CroppedBitmap(inputFrame, inputRect);
 DrawingVisual drawingVisual = new DrawingVisual();
 using(DrawingContext drawingContext = drawingVisual.RenderOpen()) {
  drawingContext.DrawRectangle(new SolidColorBrush(Color.FromArgb(255, 255, 255, 255)), null, outputRect);
  drawingContext.DrawImage((ImageSource) source1, outputRect);
  drawingContext.Close();
 }
 RenderTargetBitmap renderTargetBitmap = new RenderTargetBitmap(255, 255, 96.0, 96.0, PixelFormats.Default);
 renderTargetBitmap.Render((Visual) drawingVisual);
 source1 = (BitmapSource) new FormatConvertedBitmap((BitmapSource) renderTargetBitmap, PixelFormats.Bgr24, (BitmapPalette) null, 0.0);
 BitmapFrame frameToCache = BitmapFrame.Create(source1, (BitmapSource) null, null, (ReadOnlyCollection < ColorContext > ) null);
 encoder.Frames.Add(frameToCache);
 using(FileStream fileStream = new FileStream(strOutFileName, FileMode.Create)) {
  encoder.Save((Stream) fileStream);
  fileStream.Flush();
 }
}

Any clues out there?

like image 262
J Johansson Avatar asked Sep 18 '17 16:09

J Johansson


2 Answers

Microsoft has published an article where they state that they are aware of this problem and are working on a resolution. They also provide a workaround, basically to temporary remove the September 12, 2017, Security and Quality Rollup update.

See: https://support.microsoft.com/en-us/help/4043601/rendering-issues-after-the-september-12-2017-net-security-and-quality

like image 59
Saso Fleiser Avatar answered Nov 06 '22 23:11

Saso Fleiser


Discussion continued on https://social.msdn.microsoft.com/Forums/vstudio/en-US/0f14f14c-5cd3-4505-9168-2ef9dc1f7031/kb-4041083-kb-4040973-has-broken-wpf-rendering-in-services?forum=wpf Seems to be more than me having this issue.

like image 1
J Johansson Avatar answered Nov 06 '22 22:11

J Johansson