5

私は、大きな画像を小さなタイルに分割する必要があるアプリケーションを作成しています。各タイルは、基本的に元の画像のトリミングされたバージョンです。

現在、私の分割操作は次のようになります

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();

直感的には、これは基本的に元の画像への「参照」を作成し、画像のサブ長方形として表示されるだけだと思いました。ただし、分割操作の実行速度が遅いため、これは実際には元の画像のソースrectをコピーしていると思われます。これは、大きな画像の場合は非常に低速です(適切な分割を行うと、3〜4秒の休止が顕著になります)。サイズ画像)。

少し見回しましたが、データをコピーせずに、大きな画像のサブレクとしてビットマップを描画する方法を見つけることができませんでした。助言がありますか?

4

1 に答える 1

4

System.Windows.Media.Imaging.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;
于 2013-03-26T23:22:06.930 に答える