【问题标题】:Render a section of an image to a Bitmap C# Winforms将图像的一部分渲染到位图 C# Winforms
【发布时间】:2009-05-08 06:58:23
【问题描述】:

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

在 winforms 应用程序中,我可以通过从列表框中选择我想要的段来添加段,该列表框是从可能的段数组中填充的。

问题是我希望能够显示所选片段的预览,并且由于它存储在通用纹理上,我不能简单地设置一个图片框来显示图像。

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

非常感谢

迈克尔·艾伦

【问题讨论】:

    标签: c# winforms xna image-manipulation textures


    【解决方案1】:

    您可能想查看 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% 支持,但可以在 here 找到相关教程。

    【讨论】:

    • 对不起,我应该让自己更清楚。 Winforms 应用程序包含一个 XNA 渲染组件,该组件使用类似于您给出的示例的系统从 MapData 类中显示地图。我使用屏幕来映射所有地图交互的坐标,到目前为止它工作得很好。 MapData 地图对象中有一个 Texture2 数组,其中包含 XNA 组件绘制平铺和分段部分所需的所有纹理。我要做的是从段定义数组中获取一个矩形,然后在 winforms 应用程序中渲染它定义的纹理部分
    • 作为您选择的片段或图块的预览。我会尝试这种方法,但我不确定 DrawImage 是否可以处理 Texture2
    • 我不是 XNA 专家,我只是短暂地玩过它。也就是说,我将使用 Texture2D 而不是“Texture2”。使用 SpriteBatch,您可以加载纹理并使用 Draw() 函数来实现您想要的。在这里可以找到很好的教程:msdn.microsoft.com/en-us/library/bb194908.aspx 确保使用获取目标和源矩形的 Draw() 函数。
    【解决方案2】:

    您可以使用 Graphics.DrawImage(),它会接受一个 Rectangle。

    【讨论】:

      猜你喜欢
      • 2011-10-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多