gpt4 book ai didi

c# - image .net 4.5 的自定义绘图部分

转载 作者:行者123 更新时间:2023-11-30 16:20:59 25 4
gpt4 key购买 nike

我在屏幕上自定义绘制两个放大图像,一个相邻。每一个都占据屏幕的一半。

我之前在 .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);
}

如果我想显示拉伸(stretch)后的图片,效果很好。我想要的是显示(在 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;
}

最佳答案

看看 CroppedBitmap 类。就像您过去可以使用 e.Graphics.DrawImage() 一样,CroppedBitmap 允许您仅指定您感兴趣的图像部分。

这是一个例子:

protected override void OnRender(System.Windows.Media.DrawingContext dc)
{
int halfWidth = (int)this.Width / 2;
int height = (int)this.Height;
BitmapImage leftImage = new BitmapImage(new Uri(@"C:\Users\Public\Pictures\Sample Pictures\Chrysanthemum.jpg"));
BitmapImage rightImage = new BitmapImage(new Uri(@"C:\Users\Public\Pictures\Sample Pictures\Desert.jpg"));
CroppedBitmap leftImageCropped = new CroppedBitmap(leftImage, new Int32Rect(0, 0, halfWidth, height));
CroppedBitmap rightImageCropped = new CroppedBitmap(rightImage, new Int32Rect(0, 0, halfWidth, height));
dc.DrawImage(leftImageCropped, new System.Windows.Rect(0, 0, leftImageCropped.Width, height));
dc.DrawImage(rightImageCropped, new System.Windows.Rect(halfWidth, 0, halfWidth, height));
}

关于c# - image .net 4.5 的自定义绘图部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13654431/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com