0

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;
}
4

1 に答える 1

3

変換はまったく必要ありません。VideoImageプロパティのタイプをImageSourceまたはに変更しますBitmapSource。これで、パラメータとして次のように直接渡しますDrawImage

this.VideoImage = bitmapsource;
drawingContext.DrawImage(this.VideoImage, new Rect(0, 0, imageWidth, imageHeight));
于 2014-07-21T11:14:44.427 に答える