2011-07-06 115 views
2

我希望能够让一个Image对象渲染图像的一部分,我将以编程方式进行控制。例如,这是我到目前为止有:只显示图像中某个图像文件的某些部分

enter image description here

<Image Grid.Column="1" Grid.Row="1" Grid.RowSpan="3" Height="160" 
    HorizontalAlignment="Right" Name="avatarImage" Stretch="None" 
    VerticalAlignment="Center" Width="160" 
    Source="/Crystal%20Cloud;component/data/images/characters.png" 
    Margin="0,0,40,0" /> 

我只想渲染一次的人物之一,并使用按钮来更改它呈现哪一个。我可以这样做吗?如果是这样,怎么办?

+3

这应有助于:http://stackoverflow.com/questions/5812752/spritesheet-in-silverlight – keyboardP

回答

0

您绝对可以使用ImageBrush.Transform来提取您感兴趣的位图部分,并且如果您不需要非常高的帧速率即可。

但是,如果您需要优化帧频,则可以从精灵表中动态提取各个位图并缓存这些位图并根据需要显示它们。下面的博客帖子提供了一些代码,您可以使用这些代码来提取各个位图,然后可以进行缓存。

http://taylorza.blogspot.com/2009/08/silverlight-spritesheet-management-with.html

记住的关键,在这里表现的是你缓存位图和不通过每个你需要一个新的图像时提取它们的所有的麻烦去。

0

您也可以将您的图像放置在画布中并为其定义一个剪辑(可见部分)。然后对动画角色可以编程改变图像的顶部和左侧的时间间隔:

<Canvas Width="200" Height="100">  
    <Canvas.Clip> 
     <RectangleGeometry Rect="0, 0, 200, 100"/> 
    </Canvas.Clip> 

    <Image x:Name="imgCharacter" Source="..." Canvas.Left="..." Canvas.Top="..." /> 
</Canvas> 


imgCharacter.SetValue(Canvas.LeftProperty, currentFrame.Left); 
imgCharacter.SetValue(Canvas.LeftProperty, currentFrame.Top); 
相关问题