我为 Silverlight 找到了这个很棒的库,它基本上是 libjpeg 的一个端口,所以我非常兴奋地去查看它。从 SVN 存储库 (http://fjcore.googlecode.com/svn/trunk/) 下载库后,我能够成功构建库并将 .DLL 的引用添加到我的 Windows Phone 7 项目中。成功构建我的 WP7 项目后,使用模拟器时,应用程序崩溃并出现我以前从未见过的错误:
FieldAccessException 未处理。- System.Reflection.Emit.OpCodes.Ldarg_1
原始代码中的 silverlight 示例运行良好。该示例打开一个“打开文件”对话框,并根据所选内容调整图像大小。不幸的是,我不能在我的 WP7 项目中使用相同的代码。WP7 类不支持“打开文件”对话框。该库仅使用通用 Stream 对象,因此我从 PhotoChooserTask Completed 事件传入 e.Result(一个 PhotoStream 对象)。
关于我为什么会收到此错误以及如何解决它的任何想法?
在我的 WP7 应用程序中调整图像大小是必要的。毕竟,谁愿意等待通过 3G 网络上传 5MP 图像?我知道我肯定不会。
谢谢!
更新 - 找到在应用程序线程(不是 UI 线程)上调整 WP7 上图像大小的解决方案
protected Stream ResizeImage(WriteableBitmap tempBitmap, int maxEdge)
{
WriteableBitmap wb = tempBitmap;
// Resize to Max Values...
Size widthHeight = GetMaxWidthHeight(wb.PixelWidth, wb.PixelHeight, maxEdge);
Stream resizedStream = new MemoryStream();
wb.SaveJpeg(resizedStream, (int)widthHeight.Width, (int)widthHeight.Height, 0, 90);
return resizedStream;
}