画面上に 2 つのズームイン画像を並べてカスタム描画しています。それぞれが画面の半分を占めています。
OnPaint() をオーバーライドして、.net 3.5 (と思います) で以前に実行しました。
//using System.Drawing
/// <summary>
/// Custom drawing
/// </summary>
/// <param name="e"></param>
protected override void OnPaint(PaintEventArgs e)
{
e.Graphics.DrawImage(Image, DestRectangle, SrcRectangle, GraphicsUnit);
}
DrawImage メソッドの説明: 「指定された Image の指定された部分を、指定された位置に指定されたサイズで描画します。」( MSDN )
.net 4.5 を使用して同じことを達成しようとしています。OnRender をオーバーライドし、DrawingContext オブジェクトを使用して描画を実行しています。基本的にこれは私のループです:
//using System.Windows.Media;
/// <summary>
/// Overide the OnRender to have access to a lower level of drawing.
/// </summary>
/// <param name="drawingContext"></param>
protected override void OnRender(DrawingContext drawingContext)
{
drawingContext.DrawImage(BitmapImage_Left, Window_LeftHalf);
drawingContext.DrawImage(BitmapImage_Right, Window_RightHalf);
}
引き伸ばされた画像を表示したい場合は問題なく動作します。私が欲しいのは、(Window_LeftHalf と Window_RightHalf で) 画像の一部を (ズームインのように) 表示することです。基本的に、graphics.DrawImage (上を参照) が行うことですが、DrawingContext オブジェクトを使用します。
MSDN を見ようとしましたが、興味深いものを引き出すことができませんでした。後で DrawingContext によって使用されるバッファーを作成する可能性がありますか? ズームインされた画像を保持する中間オブジェクトが必要であることはほぼ確実です。何か案は?
更新:マウスを使用して画像をナビゲートしているため、パフォーマンスが重要です。例えば:
/// <summary>
/// Handles the mouse move events.
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private static void MouseMoveEventHandler(RoutedEventArgs e)
{
// The size of the crop is always the same
// but the portion of the picture different.
crop.X += mouseDelta.X;
crop.Y += mouseDelta.Y;
}