在我写的.NET CF应用程序中,其中一个功能是从远程摄像头获取帧。帧作为单个jpeg图像获取,并在可用时显示在屏幕上。

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

当我浏览一些博客来搜索这个问题时,我发现一些开发人员正在使用 Image.FromStream()方法,该方法具有 validateImageData 标志,似乎控制一些验证码。当 validateImageData 为false时,转换速度会快得多。

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

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

有帮助吗?

解决方案

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

此处是关于Alex Feinman的博客文章。

其他提示

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

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top