我自定义在屏幕上绘制两个放大图像,一个并排。他们每个人都占据了屏幕的一半。
我以前在.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 方法的描述:“在指定位置以指定大小绘制指定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;
}