我知道还有其他问题,但我无法找到问题的答案。
我是WPF的新手,我正在构建媒体播放器,其中还包括显示图像。其中一个选项是平铺图像。这是这样做的:
private void TilePic(string path) {
var containerWidth = MyMainWindow.Width;
double xPos = 0;
double yPos = 0;
Image image = null;
var imageSource = new BitmapImage(new Uri(path.Replace("/", "\\")));
while (yPos < MyMainWindow.Height) {
while (xPos < MyMainWindow.Width) {
image = new Image();
ImageBehavior.SetAnimatedSource(image, imageSource);
image.Margin = new Thickness(xPos, yPos, 0, 0);
image.Width = imageSource.Width;
image.Height = imageSource.Height;
MainGrid.Children.Add(image);
xPos += imageSource.Width;
}
xPos = 0;
yPos += imageSource.Height;
}
}
对于一个特定的gif图像(3,13 MB 200 x 196),功能完成后我收到了。图像很小,但很长,对于1920x1080的屏幕,这会增加约50张图像。
A first chance exception of type 'System.Runtime.InteropServices.COMException' occurred in PresentationCore.dll
at System.Windows.Media.Imaging.RenderTargetBitmap.CopyCommon(RenderTargetBitmap sourceBitmap)
图像很小,但很长,对于1920x1080的屏幕,这会增加~50张图像。
我认为它是关于太多GDI句柄的。使用GDIView,我可以看到它有~7000个区域句柄。有人能告诉我这里发生了什么以及如何避免这种情况吗?
编辑:Okey,如果他们有帮助,这里是例外细节:
System.Runtime.InteropServices.COMException occurred
_HResult=-2003304445
_message=Exception from HRESULT: 0x88980003
HResult=-2003304445
IsTransient=false
Message=Exception from HRESULT: 0x88980003
Source=PresentationCore
ErrorCode=-2003304445
StackTrace:
at System.Windows.Media.Imaging.RenderTargetBitmap.CopyCommon(RenderTargetBitmap sourceBitmap)
InnerException: