gpt4 book ai didi

c# - 在 C# 中访问单个像素

转载 作者:可可西里 更新时间:2023-11-01 14:47:33 27 4
gpt4 key购买 nike

我现在正在做一个学校项目。它是一个 3D 编辑软件,(就像一个非常精简版的 Maya)。我必须使用“Windows 应用程序项目”用 C# 编写它。我打算自己实现所有 3D 东西,从投影到阴影。我的问题是,如何才能直接访问 C# Windows 应用程序中的单个像素?我知道我将在窗口中有一个主视口(viewport)。但我还没有决定如何制作它。有没有我可以使用的内置对象,它可以让我定义视口(viewport)的边界,然后单独绘制每个像素?(我只是在黑暗中拍摄,我对 C# 了解不多。我主要用 C 编程)

谢谢,马尔基。

最佳答案

使用 CreateGraphics() 方法,这应该有效:

Bitmap b = new Bitmap(Width, Height, this.CreateGraphics());
//pixel is:
Color c = b.GetPixel(x, y);

要将像素设置为特定颜色,请使用它代替 Color c = b.GetPixel(x,y):

b.SetPixel(x, y, c); // where c is a Color

如果你想要一个视口(viewport),放置一个面板或一个 PictureBox(可能使用 Dock: Fill),然后使用:

Bitmap b = new Bitmap(viewport.Width, viewport.Height, viewport.CreateGraphics());

而不是之前使用的第一行。

但是从你想做的事情来看,我觉得还是用OnPaint事件比较好:

void pnlViewport_Paint(object sender, PaintEventArgs e) {
if ( e.ClipRectange.Width < 1 || e.ClipRectangle.Height < 1 ) return;
Bitmap b = new Bitmap(e.ClipRectangle.Width, e.ClipRectangle.Height, e.Graphics);
// ...
}

每次需要绘制控件时都会触发此事件。第一行检查正在绘制的区域是否为空 - 这不仅会节省 CPU 时间,而且你的应用程序可能会崩溃 - 你正在获取它来制作 0x0 位图。

编辑:是的,这是可调整大小的,如果 Dock = DockStyle.Fill;当您的窗口调整大小时,控件会扩展以填充空间。然后重新绘制 - 触发事件。

编辑 2:正如其他人所指出的,这仍然很慢。听起来确实需要自己进行 3D 绘图,所以也许 SDL.NET (我认为可以使用硬件加速)是要走的路。它甚至有一个(缓慢的)SurfaceControl 可供使用。

关于c# - 在 C# 中访问单个像素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/476255/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com