我正在编写一款需要将大图像分割为小块的应用程序,其中每个块本质上都是原始图像的裁剪版本。
目前,我的分割操作大致如下:
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秒暂停)。
我稍微查看了一下,但没有找到一种在不复制任何数据的情况下将位图绘制为大图像的子矩形的方法。有什么建议吗?
tile
类可以存储对原始图像的引用和在绘制自身时要复制的矩形吗? Graphics.DrawImage有重载方法,可用于绘制位图的一部分:http://msdn.microsoft.com/zh-cn/library/3tf158xz.aspx - Blorgbeard