我正在开发一款游戏引擎,现在我试图让我的一些图像平铺而不是拉伸。
出于某种原因,图像被拉伸而不是平铺。这是我的代码:
string filename = "mario_right.png";
BitmapImage bim = new BitmapImage(new Uri(@"pack://application:,,,/Assets/img/" + filename));
ImageBrush imgBrush = new ImageBrush();
imgBrush.TileMode = TileMode.Tile; //this is what makes the image tiled.
//You can change the imgBrush to some other modes as well.
imgBrush.ImageSource = bim;
player.rect.Fill = imgBrush; //player is a Body (my own class), which inherits from the Rectangle class.
实际的.png文件是50 * 50像素。当我设置播放器的正确高度和宽度(50 * 50)时,填充图像看起来很好。 当我将高度更改为250像素时,我希望将五张马里奥图像叠加在一起,但由于某些原因,这并没有发生 - .png只会被拉伸。
(拉伸播放器的.png仅用于测试;代码实际上是用于类似超级马里奥游戏的石块。)
在测试时,我还尝试在.xaml文件中插入一个矩形,然后用img填充它。出于某种原因,我仍然无法让Tile工作!我试过Stretch的四个变种,但无济于事:
<Grid x:Name="LayoutRoot" Background="White">
<Rectangle x:Name="rect" Width="50" Height="250">
<Rectangle.Fill>
<ImageBrush ImageSource="Assets/img/mario_right.png" TileMode="Tile" Stretch="None"/>
</Rectangle.Fill>
</Rectangle>
(Uniform,None等给出不同的结果,但它们都没有平铺图像。)
3。 最后,我尝试使用网格背景做同样的事情。再次,图像只显示一个,拉伸而不是50 * 50像素,它填满了整个窗口。
我开始认为问题与MainWindow.xaml文件的设置有关,但如果是这样,我如何缩放窗口(即最大化)并相应地渲染图像?
谢谢!
皮特
答案 0 :(得分:1)
要平铺图像,您必须定义要平铺的大小(以像素为单位)。您需要的属性是ViewportUnits
和Viewport
(看一看here)
所以你的代码应该是
ImageBrush imgBrush = new ImageBrush();
imgBrush.TileMode = TileMode.Tile;
imgBrush.ImageSource = bim;
imgBrush.ViewportUnits = BrushMappingMode.Absolute;
imgBrush.Viewport = new Rect(0, 0, 50, 50);
我希望它可以帮到你。