9

我有一个应用程序依赖于我们使用 DeepZoomTools.dll 的深度缩放图像(从 PNG 转换为各种比例的 JPG 金字塔)。这依赖于 PresentationCore.dll 并且多年来一直运行良好。

在推出 KB4040972 和 KB4040973 之后,从 PNG 到 JPG 的转换会生成(取决于坐标)黑色图像,而不是它应该包含的图像。

如果以下代码在控制台或桌面应用程序中运行,则它可以工作。

只有在高权限系统帐户下运行(例如,来自任务调度程序)时,它才不起作用。

我创建了一个项目来重现该问题,代码如下:

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();
 }
}

有什么线索吗?

4

3 回答 3

3

Microsoft 发表了一篇文章,表示他们已意识到此问题并正在努力解决问题。他们还提供了一种解决方法,基本上是暂时删除 2017 年 9 月 12 日的安全和质量汇总更新。

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

于 2017-09-20T12:57:46.877 回答
0

对我们来说,微软 KB4043767 推荐的更新最终解决了这个问题。这将是 10 月推出的一部分(目前处于预览阶段)。

于 2017-10-26T10:09:45.417 回答