Я произвольно рисую на экране два увеличенных изображения, одно рядом друг с другом. Каждый из них занимает половину экрана.
Я ранее делал это в .net 3.5 (я думаю), переопределив OnPaint ():
//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: «Рисует указанную часть указанного изображения в указанном месте и с указанным размером». (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, но ничего интересного не нашел. Может быть, создать буфер, который позже будет использоваться контекстом рисования? Я почти уверен, что нужен промежуточный объект, содержащий увеличенные изображения. Любые идеи?
ОБНОВЛЕНИЕ. Я использую мышь для навигации по изображению, поэтому производительность важна. Например:
/// <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;
}