首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在C#中解压JPEG图像最快的方法是什么?

在C#中解压JPEG图像最快的方法是什么?
EN

Stack Overflow用户
提问于 2009-11-20 02:39:14
回答 4查看 3.3K关注 0票数 5

我需要写一个应用程序来播放DICOM多帧图像。每一帧都以JPEG格式存储。所有帧都连续存储在一个文件中。现在,我读出每个帧数据,并将其传递给以下例程,以构造用于显示的位图:

代码语言:javascript
代码运行次数:0
运行
复制
    Bitmap CreateBitmap(byte[] pixelBuffer, int frameSize)
    {
        Bitmap image = null;

        try
        {
            long startTicks = DateTime.Now.Ticks;
            MemoryStream pixelStream = new MemoryStream(pixelBuffer, 0, frameSize);
            image = new Bitmap(pixelStream);
            loadTime = DateTime.Now.Ticks - startTicks;
        }
        catch (Exception ex)
        {
            Log.LogException(ex);
        }

        return image;
    }

在测试过程中,除了上述例程中的性能不是最优之外,其他一切都很好。对于800x600的帧大小,这个例程需要的时间是0毫秒或15毫秒(我不知道为什么)。对于1024x768帧大小,所需时间为15毫秒或31毫秒。我的目标是在不丢帧的情况下,以60 to的频率流式传输图像数据并播放图像(1024x768版本)。这意味着我必须不断地在15毫秒内解压JPEG帧。所以我的问题是,什么是更好的方法?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-11-20 02:42:54

它是0毫秒或15毫秒,因为你的计时器缺乏分辨率。使用QueryPerformanceCounter获取准确的时间。

WPF JPEG解码器(System.Windows.Media.Imaging)比GDI+解码器更快。

票数 6
EN

Stack Overflow用户

发布于 2009-11-20 02:43:37

我知道您可能有JPEG帧要求的限制,但最好的方法是使用为视频设计的不同格式,如MEPG或Quicktime。将JPEG帧转换为专为流式传输而设计的视频格式,并将其流式传输。

票数 2
EN

Stack Overflow用户

发布于 2009-12-12 07:43:20

好了,我现在知道如何在方法中使用System.Windows.Media.Imaging.JpegBitmapEncoder了:

代码语言:javascript
代码运行次数:0
运行
复制
            JpegBitmapDecoder decoder = new JpegBitmapDecoder(pixelStream, BitmapCreateOptions.None, BitmapCacheOption.None);
            BitmapFrame frame = decoder.Frames[0];
            frame.CopyPixels(pixelBuffer, stride, 0);

我测量了性能,它似乎有100%的改进。WIC和WPF做得很好。解码1024x768图像现在降到了9到10毫秒。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1765588

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档