从一个图像复制ROI并复制到wpf中的另一个图像

时间:2013-11-15 16:55:04

标签: c# wpf image-processing

我想开发一个具有以下签名的函数:

 CopyImage(ImageSource inputImage, Point inTopLeft, Point InBottomRight, ImageSource outputImage, Point outTopLeft);

此函数复制输入图像的一部分(由inTopLeft和inBottomRight定义的ROI)并将其复制到outTopLeft的outputImage。

我可以通过操作像素在WPF中执行此操作,但我正在寻找一种可以更快地完成此操作的解决方案。

在WPF中执行此操作的最快方法是什么?

1 个答案:

答案 0 :(得分:0)

您的方法可能如下所示:

private BitmapSource CopyRegion(
    BitmapSource sourceBitmap, Int32Rect sourceRect,
    BitmapSource targetBitmap, int targetX, int targetY)
{
    if (sourceBitmap.Format != targetBitmap.Format)
    {
        throw new ArgumentException(
            "Source and target bitmap must have the same PixelFormat.");
    }

    var bytesPerPixel = (sourceBitmap.Format.BitsPerPixel + 7) / 8;
    var stride = bytesPerPixel * sourceRect.Width;
    var pixelBuffer = new byte[stride * sourceRect.Height];
    sourceBitmap.CopyPixels(sourceRect, pixelBuffer, stride, 0);

    var outputBitmap = new WriteableBitmap(targetBitmap);
    sourceRect.X = targetX;
    sourceRect.Y = targetY;
    outputBitmap.WritePixels(sourceRect, pixelBuffer, stride, 0);

    return outputBitmap;
}