这是一段代码。
var image = new BitmapImage(new Uri(@"pack://application:,,,/Images/background.png",
UriKind.RelativeOrAbsolute));
var backgroundBrush = new ImageBrush()
{
ImageSource = image,
Viewport = new Rect(0, 0, image.PixelWidth / ActualWidth,
image.PixelHeight / ActualHeight),
TileMode = TileMode.Tile,
Stretch = Stretch.None,
};
// Set it for the main window.
Background = backgroundBrush;
使用XPSP3和.Net 4.0在我的电脑上工作得很好。但是,当我使用Windows 7 Home Premium在Eee PC T91MT上运行相同的样本时,它会失败。没有例外,但没有绘制任何内容(如果使用的话,会绘制纯色画笔)。我认为这可能是资源有限的结果,但在Viliv S5上,它具有相同的规格,它也可以正常工作。
有什么想法吗?
谢谢!
问题的根源是Viewport的rect。由于位图的窗口大小为X的两倍,因此rect为(0,0,2,1)。因此,在带有XPSP3的电脑上,会绘制左半部分的图像。但是在Eee PC上,它会导致可视化问题。
答案 0 :(得分:1)
答案只是规范视口矩形。例如。而不是(0,0,2,1)我必须将其设置为(0,0,1,0.5)。
我不确定,但看起来WPF只是将矩形值(经过一些转换后)传输到D3D驱动程序中,而D3D驱动程序能够(或不能)以正确的方式处理它。因此,非规范化的rect视口可以在基于GeForce的机器上运行,但不会在Eee PC上使用它的集成视频驱动程序。