动态创建图像

时间:2013-05-07 17:43:58

标签: c# wpf image

我在制作一个鼹鼠类型的游戏时遇到问题,我正在尝试创建动态出现痣的图像,但堆栈面板只有一个空白的白色屏幕。可以公平地说我是一个菜鸟。

这是我试图创建这些图像的循环:

        Image[] ImageArray = new Image[50];
        InitializeComponent();
        //string ImageName = "Image";
        for (int i = 0; i <= 8; i++)
        {
            Image Image = new Image();
            ImageArray[i] = Image;
            Image.Name = "Image" + i.ToString();
            StackPanel1.Children.Add(ImageArray[i]);
        }

        //Random Number Generator
        Random rnd = new Random();
        int num = rnd.Next(1, 9);

        //If Random Number is "1" Then Image will display
        if (num == 1)
        {
            ImageSource MoleImage = new BitmapImage(new Uri(ImgNameMole));
            ImageArray[1].Source = MoleImage;
        }

这是StackPanel XAML:

    <Window x:Name="Window1" x:Class="WhackaMole.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MainWindow" Height="468.843" Width="666.045" OpacityMask="#FFF70D0D"                         Icon="mole2.png" Cursor="" >
<Grid OpacityMask="#FF5D1313">
    <Image Margin="422,191,-185,-69" Source="mole2.png" Stretch="Fill" HorizontalAlignment="Right" VerticalAlignment="Bottom"/>

    <TextBlock HorizontalAlignment="Left" Margin="35,31,0,0" TextWrapping="Wrap"             VerticalAlignment="Top" Height="52" Width="595" FontSize="50" FontFamily="SimHei"><Run Language="en-ca" Text="Can You Catch the Mole?"/></TextBlock>
    <Button x:Name="NewGameBttn" Content="New Game" HorizontalAlignment="Left" Margin="77,0,0,16" VerticalAlignment="Bottom" Width="139" Height="50" FontSize="25" Click="NewGameBttn_Click"/>
    <Button x:Name="CloseBttn" Content="Close" HorizontalAlignment="Left" Margin="245,365,0,0" VerticalAlignment="Top" Width="76" Height="50" FontSize="29" Click="CloseBttn_Click"/>
    <StackPanel x:Name="StackPanel1" HorizontalAlignment="Left" Height="231" Margin="35,112,0,0" VerticalAlignment="Top" Width="525"/>

</Grid>
</Window>

3 个答案:

答案 0 :(得分:3)

据我所知,你正在创建一个Image类型的新对象,但Image实际上没有任何东西需要显示。您需要设置Source的{​​{1}}。这是从MSDN偷来的一个例子。

Image

正如townsean指出的那样,您应该为Image myImage = new Image(); myImage.Source = new BitmapImage(new Uri("myPicture.jpg", UriKind.RelativeOrAbsolute)); LayoutRoot.Children.Add(myImage); 创建一个Style,您可以在其中设置ImageHeight等常用属性。

答案 1 :(得分:2)

我的猜测是,由于您要将项目添加到StackPanelStackPanel正在为图像选择高度和宽度的默认分钟(可能为0),这就是为什么你没有看到任何东西。

尝试为图像的高度和宽度设置一个值,看看是否有任何显示。

此外,正如Tejas所指出的那样,你没有设置图像源。

编辑:像这样设置图像宽度:

Image myImage = new Image();
myImage.Width = 25;
myImage.Height = 25;

在您首次创建图像的for循环中执行类似的操作。

答案 2 :(得分:0)

如果您有野心,可以尝试使用OpenTK这样的库,它可以让您创建一个OpenGL视口,加载纹理并在屏幕上绘制四边形。

OpenTK支持C#与多个图形库集成(包括并专注于OpenGL),它还支持OpenAL音频。

如果您想看一个实施OpenTK的广泛示例,请查看我一直在积极开展的项目:Positron。该项目演示了通过OpenGL视口中的纹理绑定渲染到四边形上的精灵的实现。这种将图形绘制到屏幕上的方法的好处在于它具有高效和响应性。