元のビットマップから新しい CroppedImage を作成することにより、WPF アプリケーションでトリミングされた画像を表示しています。しかし、アプリケーション メモリを見ると、トリミングされた画像を表示する場合と、元の画像を表示する場合は同じです。CroppedImage は元のビットマップへの参照を保持しているため、これはおそらくそれほど奇妙ではありません。しかし、元のビットマップを参照せずにトリミングされた画像を新しいビットマップ画像として作成し、それを行うことでアプリケーションメモリを削減することは何とか可能ですか?
これを行う方法のいくつかのコードは高く評価されます。
手伝ってくれてありがとう!
[編集] トリミングされた画像を作成するためのコードは次のとおりです。
public class TheImage : ViewModelBase
{
public BitmapSource CroppedImage { get; private set; }
public TheImage(byte[] imageData)
{
var bitmapImage = CreateBitmapSource(imageData);
var croppingRectangle = CalculateCropRectangle(bitmapImage.PixelWidth, bitmapImage.PixelHeight);
CroppedImage = new CroppedBitmap(bitmapImage, croppingRectangle);
}
private static BitmapImage CreateBitmapSource(byte[] imageData)
{
var bitmapImage = new BitmapImage();
bitmapImage.BeginInit();
bitmapImage.StreamSource = new MemoryStream(imageData);
bitmapImage.EndInit();
return bitmapImage;
}
private static Int32Rect CalculateCropRectangle(int pixelWidth, int pixelHeight)
{
int width = 256;
int height = 256;
int x = (pixelWidth - width) / 2;
int y = (pixelHeight - height) / 2;
return new Int32Rect(x, y, width, height);
}
}