在Windows手机中生成图像网格

时间:2013-06-11 20:12:17

标签: c# image windows-phone-8

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

enter image description here

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

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

感谢。

P.S。我意识到我可以处理字节数组和内存流,从而避免使用第三方库,但如果可能的话,我宁愿不去解决这个问题:)

3 个答案:

答案 0 :(得分:2)

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

就实际的绘图命令而言,你仍然最终创建一个位图,写入它,关闭它并随机移动字节。有关此类示例,请参阅OfflineImageProcessing application

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

答案 1 :(得分:1)

也许你可以看看我的windows 8 store example here... 此代码现在也适用于Windows Phone 8! 我创建了一个异步方法(因此它不会阻止UI)将使用4个图像作为输入,并返回1并合并4个图像,如上图所示。

我在示例中是如何使用一个字符串将4个url连接在一起,用a分隔; 但是如何使用输入取决于你......

要创建一个合并的图像,我正在使用Blit库的WriteableBitmapEx方法found here...

答案 2 :(得分: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来实现。例如: