Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 仅显示图像中图像文件的特定部分_C#_Image_Windows Phone 7 - Fatal编程技术网

C# 仅显示图像中图像文件的特定部分

C# 仅显示图像中图像文件的特定部分,c#,image,windows-phone-7,C#,Image,Windows Phone 7,我希望能够有一个图像对象渲染只是图像的一部分,我将通过编程控制。例如,到目前为止,我所掌握的是: <Image Grid.Column="1" Grid.Row="1" Grid.RowSpan="3" Height="160" HorizontalAlignment="Right" Name="avatarImage" Stretch="None" VerticalAlignment="Center" Width="160" Source="/Crystal

我希望能够有一个图像对象渲染只是图像的一部分,我将通过编程控制。例如,到目前为止,我所掌握的是:

<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" />

我希望一次只渲染一个角色,并使用按钮更改渲染的角色。我可以这样做吗?如果可以,怎么做?

您肯定可以使用ImageBrush.Transform来提取您感兴趣的位图部分,如果您不需要非常高的帧速率,这是一种方法

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


请记住,这里性能的关键在于缓存位图,而不是每次需要新图像时都费力地提取它们。

您完全可以使用ImageBrush.Transform提取您感兴趣的位图部分,如果你不需要很高的帧速率,那就是最好的选择

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


请记住,这里性能的关键在于缓存位图,而不是每次需要新图像时都费力地提取它们。

您还可以将图像放置在画布中,并为其可见部分定义一个剪辑。然后,要设置角色动画,可以通过编程按时间间隔更改图像的顶部和左侧:

<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);

您还可以将图像放置在画布中,并为其可见部分定义剪辑。然后,要设置角色动画,可以通过编程按时间间隔更改图像的顶部和左侧:

<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);
这应该有帮助:这应该有帮助: