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

时间:2014-11-10 16:21:49

标签: c# gdi region

我试图用C#和GDI +创建一个小游戏。出于学习目的,我试图避免尽可能多的框架等。所以我对GDI +有一些具体问题

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

您可以在图形对象(而不是位图)中读取和设置单个像素吗?

您是否有任何提示让我提高GDI的整体表现?

感谢您的帮助

2 个答案:

答案 0 :(得分:1)

  

是否可以用图像填充GDI中的区域对象?

无法填充某个区域,也无法存储像素。你几乎肯定在这里寻找的是Graphics.Clip属性。将区域分配给它并绘制图像,它将被区域剪切。

  

您可以在图形对象(而不是位图)中读取和设置单个像素吗?

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

  

您是否有任何提示让我提高GDI的整体表现?

有一个至关重要的一个,.NET使非常容易被忽视。您绘制的位图的像素格式非常重要。您对位图执行的最昂贵的操作是复制,从CPU内存复制到视频适配器的内存。如果像素的格式与视频适配器使用的格式完全匹配,则该副本速度很快。在PixelFormat.Format32bppPArgb的所有现代机器上。差异很大,比其他所有人快十倍

答案 1 :(得分:0)

许多答案将详细说明这些要点:

  1. 获得Region后,它将限制绘制像素的位置。使用Graphics.DrawImage然后
  2. 无法阅读,只有perverted way设置Pixel Graphics.FillRectangle(br, x,y,1,1);这背后的原因可能是Graphics不能只在{{1}中运行模式,但也有各种其他Pixel从点到英寸和mm ..
    • 使用Units。只有一个example using one Bitmap。其他常见工作要求锁定两个(一个输入一个输出)或甚至三个(两个输入和一个计算输出)位图..
    • 知道你失效的是什么,通常只有一小部分确实需要它..
    • 了解ImageList,它不能做太多但对它的作用很有用,即一个大小和颜色深度的缓存图像
    • 了解何时使用Lockbits以及何时Panel