在我编写的一个.NET CF应用程序中,其中一个特性是从远程摄像机获取帧。帧作为单个jpeg图像获取,并在可用时显示在屏幕上。
这是一个足够好的解决方案,但我不喜欢这样一个事实:使用Image
构造函数将流转换为Bitmap()
对象所需的时间远远大于下载流所需的时间。
当我浏览一些博客来搜索这个问题时,我发现一些开发人员正在使用Image.FromStream()
方法,该方法有一个validateImageData
标志,它似乎控制了一些验证代码。当validateImageData
为false时,转换速度会大大加快。
很好,我想.但是没有实现这个方法!
有人知道如何绕过它,或者至少知道如何在没有不必要的延迟的情况下将流转换为Image
?
发布于 2009-09-01 23:43:36
不确定这是否有帮助,但OpenNETCF.Drawing.Imaging有类可以从流中读取图像,但它们是IImage包装的com对象。然后可以使用IImage.Draw将其绘制到位图上。它还有一个GetThumbnail方法,我用它来获取设备上大型jpegs的缩放图像。
这里是亚历克斯·芬曼( Alex )的博客文章。
发布于 2008-11-12 23:38:33
如果JPEG的尺寸很大(比如1200 x 1600或什么的),那么您的设备上使用bitmap构造函数的速度问题之一就是必须在内存中创建位图大小(位图也是1200 x 1600,即使它随后显示在240 X 320屏幕上)。如果您可以检索已经大小为320 X 240的JPEG,而不是全尺寸的JPEG,则位图的创建时间应该要短得多。
除了Bitmap构造函数之外,我找不到缺少的FromStream方法的任何替代方法。如果您熟悉JPEG格式,我认为编写自己的JPEG到BMP转换器并不太困难,但我猜它不会比Bitmap()更快。
编辑:对不起,我的意思是你自己的滚动转换器将不会更快地将240 X 320 JPEG转换成240 X 320位图。我认为它可以更快地将一个更大的JPEG转换成一个240×320位图,因为它可以跳过首先创建全尺寸位图的步骤。
https://stackoverflow.com/questions/285440
复制相似问题