Отображать только определенную часть файла изображения в изображении - PullRequest
2 голосов
/ 06 июля 2011

Я хочу, чтобы объект 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" />

Я хочу отображать только один из символов за раз и использовать кнопку, чтобы изменить, какой из них будет отображаться. Могу ли я это сделать, и если да, то как?

Ответы [ 2 ]

0 голосов
/ 06 июля 2011

Вы также можете поместить свое изображение в Canvas и определить клип для него (видимая часть). Затем для анимации персонажа вы можете программно изменять верхнюю и левую части изображения через промежутки времени:

<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);
0 голосов
/ 06 июля 2011

Вы, безусловно, можете использовать ImageBrush.Transform, чтобы извлечь часть растрового изображения, которая вас интересует, и если вам не требуется очень высокая частота кадров, это путь.

Однако если вам необходимо оптимизировать частоту кадров, вы можете динамически извлекать отдельные растровые изображения из таблицы спрайтов, кэшировать эти растровые изображения и отображать их по мере необходимости.В блоге ниже представлен некоторый код, который вы можете использовать для извлечения отдельных растровых изображений, которые затем можно кэшировать.

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

Помните, что ключом к производительности здесь является то, что вы кэшируете растровые изображения и не тратите все силы на их извлечение каждый раз, когда вам нужно новое изображение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...