2017-09-18 50 views
8

我有一個應用程序依賴於Deep Zoom圖像(我們使用DeepZoomTools.dll將其從PNG轉換爲JPG金字塔)。這是依賴於PresentationCore.dll並且多年來一直工作正常。Windows更新KB4040972/73導致帶有WPF類的黑色圖像

在推出KB4040972和KB4040973之後,從PNG到JPG的轉換會生成(取決於座標)黑色圖像,而不是它應該包含的圖像。

如果下面的代碼在控制檯或桌面應用程序中運行,它將起作用。

只有在高權限SYSTEM帳戶(例如,來自任務計劃程序)下運行它纔會工作。

我創建了一個項目,以重現該問題,下面的代碼:

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

任何線索了嗎?

+0

可能這不是一個好問題,它只是一個窗口中的錯誤, – zowers

+0

請參閱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 – zowers

+0

同樣的問題在這裏。 –

回答

2

微軟發表了一篇文章,指出他們意識到這個問題並正在研究解決方案。他們還提供了一種解決方法,基本上是爲了臨時刪除2017年9月12日的安全和質量彙總更新。

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

+0

此解決方案可用於「.NET Framework 2017年10月安全和質量彙總」更新。請參閱:https://blogs.msdn.microsoft.com/dotnet/2017/10/10/net-framework-october-2017-security-and-quality-rollup/ –

0

對於我們從微軟KB4043767推薦的更新解決了這個問題的結束。這將成爲十月推出的一部分(目前在預覽中)。