C# 或 C++ - 概述 Windows 图形的良好资源 - 2D,直接绘制像素

本文关键字:2D 资源 像素 绘制 C++ 概述 Windows 图形 | 更新日期: 2023-09-27 17:56:00

我一直在研究一个奇怪的小生活模拟程序,它涉及二维数组中的数据。这从来都不应该是一件大事,我最初只是通过将其写到外部位图上来查看它的一些快照,逐个像素,然后我打开并查看。这不会给我任何形式的屏幕实时更新。这是一种可怕的方法,在尝试直接在窗口中实现绘制时,我想第一次正确有效地执行此操作。

做了一些搜索并找到了bitblt,它可以让我一次绘制一个完整的矩形,但是我所有的图形经验都仅限于WPF之类的东西,很多术语对我来说都丢失了。我不知道我的数据应该是什么格式才能将其作为位图传递给此函数。在阅读 msdn 时,我发现了对 DC 等内容的引用,还有更多我尚未了解的东西。

我不需要了解很多关于 Windows 图形 API 或 .NET 的绘图框架。我不想学习一堆DirectX。我想制作一个特定尺寸的窗口,我希望能够根据需要设置每个像素的 RGB 值。没有绘图形状或任何东西,只有像素。但是我也不想一次做一个像素,每个像素都有一个单独的系统调用,因为即使是像我这样蹩脚的程序员也知道这是多么低效。有谁知道是否是一个很好的资源,可以对 Windows 中的图形进行简单的解释并让我这样做?MSDN 非常适合查找内容,但如果您想从头开始学习一些东西,那就有点多了。

C# 更可取,因为用它编写的 lifesim,但如果有充分的理由,我对用 C++ 重写它没有任何疑虑。

C# 或 C++ - 概述 Windows 图形的良好资源 - 2D,直接绘制像素

您可以在 WPF 中尝试 WriteableBitmap 类,看看它是否符合您的目的。

教程

您所要做的就是将数据保存在 2D 数组中并将其写入可写位图。将"可写位图"设置为"WPF 图像"的图像源,就完成了。

如果您需要示例,请告诉我。

您可能

想要做的是使用 LockBits 锁定图像数据,然后将图像作为数组进行操作。这是鲍勃鲍威尔的一个很棒的教程:

https://web.archive.org/web/20121203144033/http://www.bobpowell.net/lockingbits.htm

否则,如果速度不是问题,则可以使用 GetPixel 和 SetPixel 方法。这些速度非常慢,但可以在托管环境中工作。