我试图用C#和GDI +创建一个小游戏。出于学习目的,我试图避免尽可能多的框架等。所以我对GDI +有一些具体问题
是否可以使用图像填充GDI中的区域对象? - 如果没有,是否有手动方式?
您可以在图形对象(而不是位图)中读取和设置单个像素吗?
您是否有任何提示让我提高GDI的整体表现?
感谢您的帮助
答案 0 :(得分:1)
是否可以用图像填充GDI中的区域对象?
无法填充某个区域,也无法存储像素。你几乎肯定在这里寻找的是Graphics.Clip属性。将区域分配给它并绘制图像,它将被区域剪切。
您可以在图形对象(而不是位图)中读取和设置单个像素吗?
不,Graphics对象本身并不存储任何像素,它只跟踪您绘制的位置。 "设备上下文"在Windows中说话。哪个可以是位图,屏幕,打印机,图元文件。并非所有这些设备上下文都允许您在绘制后读取像素(例如,不是打印机而不是元文件)。但是当你绘制到位图时当然没问题。
您是否有任何提示让我提高GDI的整体表现?
有一个至关重要的一个,.NET使非常容易被忽视。您绘制的位图的像素格式非常重要。您对位图执行的最昂贵的操作是将复制,从CPU内存复制到视频适配器的内存。如果像素的格式与视频适配器使用的格式完全匹配,则该副本速度很快。在PixelFormat.Format32bppPArgb的所有现代机器上。差异很大,比其他所有人快十倍。
答案 1 :(得分:0)
许多答案将详细说明这些要点:
Region
后,它将限制绘制像素的位置。使用Graphics.DrawImage
然后Pixel
Graphics.FillRectangle(br, x,y,1,1);
这背后的原因可能是Graphics
不能只在{{1}中运行模式,但也有各种其他Pixel
从点到英寸和mm .. Units
。只有一个example using one Bitmap。其他常见工作要求锁定两个(一个输入一个输出)或甚至三个(两个输入和一个计算输出)位图.. Lockbits
以及何时Panel