裁剪图像不复制

本文关键字:复制 图像 裁剪 | 更新日期: 2023-09-27 18:05:56

我正在编写一个应用程序,它需要我将一个大图像分割成小块,其中每个块实际上是原始图像的裁剪版本。

目前我的分割操作看起来像这样

tile.Image = new BitmapImage();
tile.Image.BeginInit();
tile.Image.UriSource = OriginalImage.UriSource;
tile.Image.SourceRect = new Int32Rect(x * tileWidth + x, y * tileHeight, tileWidth, tileHeight);
tile.Image.EndInit();

直观地,我认为这基本上会创建一个原始图像的"引用",并且只会显示为图像的子矩形。然而,我的分割操作执行的缓慢速度使我相信这实际上是复制原始图像的源矩形,这对于大图像来说非常慢(在分割大小合适的图像时有明显的3-4秒暂停)。

我看了一下,但没能找到一种方法来绘制一个位图作为一个大图像的子矩形,而不复制任何数据。有什么建议吗?

裁剪图像不复制

使用system . windows . media . image . croppedbitmap类:

// Create a CroppedBitmap from the original image.
Int32Rect rect = new Int32Rect(x * tileWidth + x, y * tileHeight, tileWidth, tileHeight);
CroppedBitmap croppedBitmap = new CroppedBitmap(originalImage, rect);
// Create an Image element.
Image tileImage = new Image();
tileImage.Width = tileWidth;
tileImage.Height = tileHeight;
tileImage.Source = croppedBitmap;