代码之家  ›  专栏  ›  技术社区  ›  Chris

将BitmapSource转换为BitmapImage的更快方法

  •  0
  • Chris  · 技术社区  · 10 年前

    我们有一些视频软件可以转换 BitmapSource 进入 BitmapImage 随后使用以下代码将其绘制到屏幕上。问题是在速度较慢的机器上,这个过程似乎有点慢,运行MS探查器,结果发现这些位图操作(即 ToBitmapImage 函数)是我们进行的最昂贵的4个调用。我能做些什么来提高效率吗?

    // Conversion
    this.VideoImage = bitmapsource.ToBitmapImage();
    
    // Drawing
    drawingContext.DrawImage(this.VideoImage, new Rect(0, 0, imageWidth, imageHeight));
    
    // Conversion code
    internal static BitmapImage ToBitmapImage(this BitmapSource bitmapSource)
    {
        JpegBitmapEncoder encoder = new JpegBitmapEncoder()
        MemoryStream memorystream = new MemoryStream();
        BitmapImage tmpImage = new BitmapImage();
        encoder.Frames.Add(BitmapFrame.Create(bitmapSource));
        encoder.Save(memorystream);
    
        tmpImage.BeginInit();
        tmpImage.StreamSource = new MemoryStream(memorystream.ToArray());
        tmpImage.EndInit();
    
        memorystream.Close();
        return tmpImage;
    }
    
    1 回复  |  直到 10 年前
        1
  •  3
  •   Clemens    10 年前

    根本不需要转换。更改您的 VideoImage 属性到 ImageSource BitmapSource 。现在直接将其作为参数传递给 DrawImage :

    this.VideoImage = bitmapsource;
    drawingContext.DrawImage(this.VideoImage, new Rect(0, 0, imageWidth, imageHeight));