C# GDI的一些具体问题+;在C中#

C# GDI的一些具体问题+;在C中#,c#,gdi,region,C#,Gdi,Region,我正在尝试用C#和GDI+创建一个小游戏。出于学习目的,我尽量避免使用框架等。所以我有一些具体的问题要问GDI+ 可以用图像填充GDI中的区域对象吗? -如果没有,是否有手动方式 能否读取和设置图形对象(而不是位图)中的单个像素 你有什么建议可以让我提高GDI的整体性能吗 感谢您的帮助许多答案将详述以下几点: 一旦有了区域,它将限制绘制像素的位置。使用Graphics.DrawImage然后 无法读取,只能通过Graphics.FillRectangle(br,x,y,1,1)设置像素这背后的原

我正在尝试用C#和GDI+创建一个小游戏。出于学习目的,我尽量避免使用框架等。所以我有一些具体的问题要问GDI+

可以用图像填充GDI中的区域对象吗? -如果没有,是否有手动方式

能否读取和设置图形对象(而不是位图)中的单个像素

你有什么建议可以让我提高GDI的整体性能吗


感谢您的帮助

许多答案将详述以下几点:

  • 一旦有了
    区域
    ,它将限制绘制像素的位置。使用
    Graphics.DrawImage
    然后
  • 无法读取,只能通过
    Graphics.FillRectangle(br,x,y,1,1)设置
    像素
    这背后的原因可能是
    图形
    不仅可以在
    像素
    模式下运行,还可以使用从点到英寸和毫米的各种其他
    单位
    • 使用
      锁位
      。就一个。其他常见作业要求锁定两个(一个输入一个输出)或甚至三个(两个输入一个计算输出)位图
    • 知道什么是无效的,通常只有一小部分真正需要它
    • 了解ImageList,它的功能不多,但对它的功能非常有用,即缓存大小和颜色深度为1的图像
    • 了解何时使用
      面板
      以及何时使用
      图片盒
  • 可以用图像填充GDI中的区域对象吗

    区域无法填充,它不存储像素。几乎可以肯定,您在这里要查找的是Graphics.Clip属性。将区域指定给它并绘制图像,它将被该区域剪裁

    能否读取和设置图形对象(而不是位图)中的单个像素

    不,图形对象本身不存储任何像素,它只跟踪绘制到的位置。Windows speak中的“设备上下文”。它可以是位图、屏幕、打印机、图元文件。并非所有这些设备上下文都允许您在绘制后读取像素(例如,不是打印机,也不是图元文件)。但是当你画位图的时候当然没有问题

    你有什么建议可以让我提高GDI的整体性能吗


    有一个关键点,.NET使它很容易被忽视。位图的像素格式非常重要。使用位图最昂贵的事情是将位图从CPU内存复制到视频适配器的内存。只有当像素的格式与视频适配器使用的格式完全匹配时,该复制才会快速。在所有现代机器上,这是PixelFormat.Format32bppPArgb。差别很大,它比所有其他的都快十倍。

    这对于堆栈溢出来说太宽了。首先,请每个问题问一个问题。您的前两个还可以(您当前拥有的任何代码示例都很好)。第三个肯定太宽泛了。另一个回答提到了一个关于性能技巧的问题。有点短,但我觉得很好!