大きな画像を小さなタイルに分割する必要があるアプリケーションを作成しています。各タイルは基本的に元の画像のクロップされたバージョンです。コピーなしのクロップ画像
現在、私のスプリット操作が直感的に、私はこれが基本的に元の画像を「参照」を作成し、ちょうど画像のサブ四角形として表示するであろうと考え、この
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秒間の休止があります。サイズ画像)。
私はちょっと見渡しましたが、データをコピーせずに、大きな画像のサブ矩形としてビットマップを描画する方法を見つけることができませんでした。助言がありますか?
は、新しい 'Bitmap'を作成し、その中に、ブリットしようとしたことがありますか?私はそれがイメージをインラインでトリミングしようとするよりも速いかもしれないと思う。 –
'tile'クラスは、元のイメージへの参照を格納し、描画するときにコピーする四角形を格納できますか? Graphics.DrawImageにはビットマップの一部を描画するためのオーバーロードがあります:http://msdn.microsoft.com/en-us/library/3tf158xz.aspx – Blorgbeard
私はイメージ操作に関する専門家ではありませんが、わかりませんあなたが求めているものは理にかなっています。コピーを隠す仕組みがあるかもしれないが、私は画像データをメモリに「再配置」(コピー)する必要があると思われる。 – svidgen