用GDI +显示像素数据

时间:2012-04-24 18:12:35

标签: winforms graphics gdi+ 3d

我正在编写一个简单的3D渲染引擎 我的3D处理的最终结果是像素数据。接下来我需要用GDI +在屏幕上显示它 我正在使用WinForms和Visual Basic。我直接在表单的ClientRectangle上绘图。

我有一些问题 在处理像素之后,我应该首先将像素数据写入缓冲区,而不是将每个像素单独发送到GDI +吗?   - 如果是这样,我应该一次缓冲多少屏幕?全屏,半屏,四分之一,八分之一?我认为这里可能存在RAM使用/性能权衡   - 像素缓冲区的最佳数据结构是什么?   - 我用哪个GDI +命令渲染像素缓冲区(或单个像素)?是否可以避免将位图创建为中间步骤并将像素数据直接发送到屏幕?

我预计的最大屏幕尺寸为1600x1200。 RAM可能低至1GB。

感谢。

1 个答案:

答案 0 :(得分:2)

希望你能在这里找到一些答案

  1. 首先将数据写入RGBA结构的缓冲区。例如,如果要渲染多个“图层”然后合成它们,这将使其变得简单。如果您想在某个时刻执行任何延迟处理,它也会很容易。一旦完整(tile?)渲染完成,您可以将其刷新到输出位图/文件。
  2. 这取决于您允许用户呈现的分辨率。如果要渲染千兆像素图像,则需要以合理的大小对其进行平铺。我建议可以配置磁贴大小,然后在测试后将其设置为合理的默认值。
  3. 如果您不想执行任何延迟着色,我建议您使用简单的RGBA缓冲区。
  4. 如果您没有执行适合内存的平铺渲染/渲染图像,您只需使用Bitmap.LockBits并以此方式写入数据。如果您正在使用平铺渲染,则需要找到一个允许您一次渲染扫描线的库(并使其成为“平铺”)或修复您要编写的文件格式TGA,PNG和搜索/写入直接到文件。将图像转储为RAW文件,然后使用命令行工具进行转换也是另一种选择。
  5. 希望这有帮助!