4

在我编写的 .NET CF 应用程序中,功能之一是从远程摄像机获取帧。帧以单个 jpeg 图像的形式获取,并在可用时显示在屏幕上。

这是一个足够好的解决方案,但我不喜欢使用构造函数将流转换为Image对象所需的时间远远大于下载流所需的时间。Bitmap()

当我浏览一些博客搜索这个问题时,我发现一些开发人员正在使用带有一个似乎控制一些验证代码Image.FromStream()的标志的方法。validateImageDatavalidateImageData为 false 时,转换会显着加快。

很好,我想....但是 Compact Framework 没有实现这个方法!

任何人都知道如何绕过它,或者至少如何将流转换为Image没有不必要的延迟?

4

2 回答 2

1

如果 JPEG 的尺寸很大(例如 1200 x 1600 或其他东西),那么您在使用 Bitmap 构造函数的设备上遇到的速度问题之一是必须在内存中创建位图的大小(位图将也是 1200 x 1600,即使它随后显示在 240 X 320 屏幕上)。如果您可以检索到 320 X 240 的已经大小的 JPEG 而不是全尺寸的,则位图创建时间应该少得多。

除了 Bitmap 构造函数之外,我找不到缺失的 FromStream 方法的任何替代方法。如果您熟悉 JPEG 格式,我认为编写自己的 JPEG 到 BMP 转换器不会太难,但我猜它不会比 Bitmap() 快。

编辑:对不起,我的意思是你自己的转换器在将 240 X 320 JPEG 转换为 240 X 320 位图时不会更快。我认为它可以更快地将更大的 JPEG 转换为 240 X 320 位图,因为它可以跳过首先创建全尺寸位图的步骤。

于 2008-11-12T23:38:33.930 回答
1

不确定这是否会有所帮助,但 OpenNETCF.Drawing.Imaging 具有从流中读取图像的类,但它们是 IImage 包装的 com 对象。然后,您可以使用 IImage.Draw 将其绘制到您的位图上。它还有一个 GetThumbnail 方法,我用它来获取设备上大型 jpeg 的缩放图像。

是来自 Alex Feinman 的一篇博客文章。

于 2009-09-01T23:43:36.080 回答