【发布时间】:2011-07-13 22:51:07
【问题描述】:
我正在编写一个处理大量图像的 Windows Phone 7 应用程序 - 这些图像的范围可以从几百像素到 1080P(未来可能更高)。
图片非常耗费资源,所以我在显示它们之前在手机上缓存+调整图片大小。
这意味着在用户输入图像存储的 IP 地址后的第一次设置时,我可以要求他们等待几分钟,同时所有图像都被检索/调整大小/缓存。从那时起,他们可以有漂亮而活泼的表现。
目前,我的缓存管理器通过 Uri 的字典和文件位置来跟踪图像。我有一个队列,一次最多处理 5 个图像(异步 Web 请求,调整大小在线程池线程上半完成)。
我遇到的问题是 Silverlight 中的 WritableBitmap 类是一个 UI 元素,这意味着我必须通过 Dispatcher 转换到 UI 线程来进行实际的调整大小,这很愚蠢并且会减慢整个过程 - 这也意味着我的缓存管理器实际上是单线程的。
缓存管理器(线程池)-> 异步 Web 请求(线程池)-> 回调(线程池)-> 调整大小(UI 线程)-> 将缓存作业标记为完成(线程池)。
我一直在寻找一个第三方库,它将 A) 在 Windows Phone 7 上编译和运行 B) 能够通过操作流或字节数组来调整各种格式的图像大小,而不依赖于 UI 线程.
有人有这方面的经验吗?
干杯,
泰勒
【问题讨论】:
-
有没有机会在下载图片时使用网络服务来调整图片大小?
-
它们来自我无法控制的外部系统 =/
-
您可以将 URL 传递给一个网络服务,该服务将执行下载+调整大小,然后将较小的图像传回 Windows 手机?我想这就是达米安所说的。
-
啊,对,那太慢了抱歉。调整它们大小的实际行为已经足够快了……我只知道如果我不必转换到 UI 线程来执行它,它可以快得多。我只需要一个可以在字节级别上使用 png 和 jpeg 的库,它可以在 UI 以外的线程上使用。
-
我已经搜索了一整天,还没有找到任何东西 - 我确实找到了 LeadTools,它是一套支持 WP7 的大量成像工具 - leadtools.com/sdk/silverlight/windows-phone.htm - 他们的调整大小类可以运行后台线程,但不幸的是它是 A)比 WriteableBitmap 慢了很多,B)看起来在某些时候它们在调整大小期间正在转换到 UI 线程(屏幕闪烁白色 - 很好的迹象是 UI 线程被阻止了)。
标签: c# .net image windows-phone-7