将图像的一部分渲染为位图C#Winforms

将图像的一部分渲染为位图C#Winforms,c#,winforms,xna,image-manipulation,textures,C#,Winforms,Xna,Image Manipulation,Textures,我正在为我在空闲时间设计的XNA游戏制作地图编辑器。地图中使用的艺术品存储在单个纹理上,矩形存储在坐标和宽度等处 在winforms应用程序中,我可以通过从列表框中选择所需的段来添加段,列表框由可能的段数组填充 问题是我希望能够显示所选片段的预览,因为它存储在公共纹理上,所以我不能简单地设置picturebox来显示图像 是否可以使用矩形信息(.x、.y、.width、.height)在picturebox中仅显示图像的部分,或者将该部分显示为位图并显示该部分 非常感谢 Michael Alle

我正在为我在空闲时间设计的XNA游戏制作地图编辑器。地图中使用的艺术品存储在单个纹理上,矩形存储在坐标和宽度等处

在winforms应用程序中,我可以通过从列表框中选择所需的段来添加段,列表框由可能的段数组填充

问题是我希望能够显示所选片段的预览,因为它存储在公共纹理上,所以我不能简单地设置picturebox来显示图像

是否可以使用矩形信息(.x、.y、.width、.height)在picturebox中仅显示图像的部分,或者将该部分显示为位图并显示该部分

非常感谢


Michael Allen

您可以使用Graphics.DrawImage(),它将接受一个矩形。

您可能需要查看GDI库。将Image或Bitmap对象与Graphics.DrawImage()一起使用将获得所需的内容

private void DrawImageRectRect(PaintEventArgs e)
{

    // Create image.
    Image newImage = Image.FromFile("SampImag.jpg");

    // Create rectangle for displaying image.
    Rectangle destRect = new Rectangle(100, 100, 450, 150);

    // Create rectangle for source image.
    Rectangle srcRect = new Rectangle(50, 50, 150, 150);
    GraphicsUnit units = GraphicsUnit.Pixel;

    // Draw image to screen.
    e.Graphics.DrawImage(newImage, destRect, srcRect, units);
}

您可能还对在WinForm中使用XNA而不是使用PictureBoxes和GDI感兴趣。它还没有得到100%的支持,但是可以找到关于它的教程。

对不起,我应该说得更清楚一些。Winforms应用程序包含一个XNA渲染组件,该组件使用与您给出的示例类似的系统从MapData类显示地图。我使用屏幕来映射所有地图交互的坐标,到目前为止,它工作得非常好。MapData map对象中有一个Texture2数组,其中包含XNA组件绘制平铺和分段所需的所有纹理。我要做的是从段定义数组中获取一个矩形,并在winforms应用程序中渲染其中定义的纹理部分,作为所选段或平铺的预览。我将尝试这种方法,但我不确定DrawImage是否能处理纹理2我不是XNA专家,我只是简单地使用了它。也就是说,我将使用Texture2D,而不是任何“Texture2”。使用SpriteBatch,可以加载纹理并使用Draw()函数实现所需的效果。这里有一个很好的教程:确保使用Draw()函数获取目标和源矩形。