2011-07-06 122 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); 
相關問題