2011-07-06 13 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" /> 

私は一度に文字のいずれかをレンダリングし、それがレンダリングされた1変更するボタンを使用します。私はこれをすることができますか?

+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); 
関連する問題