我在一个团队中,给定一组图像,试图在Windows Phone 8中创建一个2 X 2图像的网格 - 类似于Spotify在播放列表中生成相册图像的复合时所做的:
我们在应用程序中执行此操作的当前方式涉及使用Grids,WriteableBitmaps和Bitmap对象。但是,这些对象与UI线程绑定,我们希望在不中断UI线程的情况下在单独的线程中进行所有图像处理。
我的问题是:有没有办法在不中断UI线程的情况下做到这一点?如果WP8中的给定框架无法做到这一点,是否有允许我们这样做的第三方库(C#或C ++)?
感谢。
P.S。我意识到我可以处理字节数组和内存流,从而避免使用第三方库,但如果可能的话,我宁愿不去解决这个问题:)
答案 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来实现。例如: