2016-09-15 218 views
1

裁剪图像那么到底我们该怎么做精灵在UWP又名Windows应用商店的应用程序? this SO post中描述的两种方法在UWP中不起作用。 (CroppedBitmap类不工作,ImageBrush类没有Viewbox属性)。我试过ClipRenderTransform,但还没有成功。下一步该去哪里?在Windows商店应用

+1

你能澄清的是什么你实际上是想干什么?通过精灵,我猜你想要一个包含所有状态下所有精灵图像的大型位图,然后试图动态更改裁剪以执行精灵动画。如果这确实是你正在试图做的话,我会建议调查[Win2D(https://github.com/Microsoft/Win2D),这是更具针对性什么你仿佛是试图做。 – ibebbs

+0

@ibebbs:你的理解是正确的。在WPF和SL中,我们可以在纯XAML中完成此操作,而无需编写任何代码(请参阅我在问题中发布的SO链接)。我在Google上看到了Win2D。看起来我不得不使用它作为最后的手段,如果我找不到更简单的方法。 – dotNET

回答

1

正如@ibebbs所说,Win2D是在UWP中使用精灵的好选择。 Win2D是一款易于使用的Windows运行时API,可用于GPU加速的即时模式2D图形渲染。 Win2D中的CanvasSpriteBatch Class针对精灵场景进行了优化。

CanvasSpriteBatch允许更高效地被多个位图和具有比DrawImage API更好的性能,特别是当许多精灵在连续使用同一源位图绘制。 CanvasSpriteBatch支持以下功能:

有关如何使用CanvasSpriteBatch更多信息,请参阅CanvasSpriteBatch Class documentSprite Sheets sample在GitHub上。

更新:

如果你不想使用Win2D,一个简单的方法才达到你想要使用ImageBrushTransform什么样子如下:

<Rectangle Width="128" Height="192"> 
    <Rectangle.Fill> 
     <ImageBrush AlignmentX="Left" 
        AlignmentY="Top" 
        ImageSource="Assets/WizardIdleRight.png" 
        Stretch="None"> 
      <ImageBrush.Transform> 
       <TranslateTransform x:Name="SpriteSheetOffset" X="0" Y="-384" /> 
      </ImageBrush.Transform> 
     </ImageBrush> 
    </Rectangle.Fill> 
</Rectangle> 

这里我在Sprite Sheets sample使用的WizardIdleRight.png,我们可以改变TranslateTransform送偏移我们想要的精灵如何。

+0

谢谢Jay,非常翔实。我正在开发的游戏是一款简单的纸牌游戏,我将所有52张卡片图像放在一个PNG中。我正在寻找的是将该图像作为应用程序级资源加载,然后为每个“Image”元素分配集合“Clip”属性以显示相应的卡片。对我来说,Win2D听起来像是一把更大的枪,用于更激烈,互动和实时的游戏。或者是? – dotNET

+0

只是出于好奇,如果您在XAML中编写此代码,为什么不使用DataTemplate卡,并使用适合图形资源的套装字形(或更好的符号字体)。这将导致尺寸更小的应用程序在各种分辨率下更好地扩展。 – ibebbs

+0

@dotNET如果你不想使用Win2D,使用ImageBrush和Transform可能是一种简单的方法。请检查我更新的答案。 –