2

我在一个团队中,给定一组图像,试图在 Windows Phone 8 中创建一个 2 X 2 图像的网格 - 类似于 Spotify 在生成播放列表中专辑图像的合成时所做的事情:

在此处输入图像描述

我们在应用程序中执行此操作的当前方式涉及使用 Grids、WriteableBitmaps 和 Bitmap 对象。但是,这些对象与 UI 线程相关联,我们希望在不中断 UI 线程的情况下在单独的线程中进行所有图像处理。

我的问题是:有没有办法在不中断 UI 线程的情况下做到这一点?如果 WP8 中的给定框架无法做到这一点,是否有第三方库(C# 或 C++)允许我们这样做?

谢谢。

PS我意识到我可以处理字节数组和内存流,从而避免使用第三方库,但如果可能的话我宁愿不经历那个麻烦:)

4

3 回答 3

2

GDI 和 GDI+不可用,但 DirectX 和 Direct2D 可用于 Windows Phone 8 应用程序。但是,.Net BCL 中不存在 C# API,因此您必须使用像SharpDX这样的包装器,它有一个 WinRT 版本。

就实际的绘图命令而言,您最终仍然会创建一个位图,写入它,关闭它并重新排列字节。有关此类示例,请参见OfflineImageProcessing 应用程序。

遗憾的是,虽然 SharpDX 非常有用,但它是本机 COM 接口的一个非常薄的包装器,使用 Direct2D 进行简单操作的复杂性可能令人生畏。

于 2013-06-12T05:46:09.730 回答
1

也许您可以在这里查看我的windows 8 商店示例... 此代码现在也可以在 windows phone 8 上运行!我创建了一个异步方法(因此它不会阻塞 UI),它将使用 4 张图像作为输入并返回 1,其中 4 张图像合并,如上图所示。

我在示例中的做法是使用一个字符串,其中 4 个 url 连接在一起,用 ; 分隔。但是如何使用输入取决于您...

要创建一个合并的图像,我正在使用此处找到的库的Blit方法...WriteableBitmapEx

于 2013-06-12T06:53:08.283 回答
0

尝试使用 CreateOptions="BackgroundCreation"?

<Image Height="100" Width="100" Margin="12,0,9,0">
  <Image.Source>
    <BitmapImage UriSource="{Binding ImgURL}" CreateOptions="BackgroundCreation"/>
  </Image.Source>
</Image>

来自msdn

图像创建

一个值得注意的 Windows Phone OS 7.1 性能优化是将图像解码移动到后台线程而不是阻塞 UI 线程的选项。这可以通过将 CreateOptions 属性设置为 BackgroundCreation 来实现。例如:

于 2013-06-12T09:46:43.967 回答