gpt4 book ai didi

c# - 如何绘制图像?

转载 作者:行者123 更新时间:2023-11-30 15:43:38 25 4
gpt4 key购买 nike

如何使用图形绘制创建 256x256 色彩空间图像?目前我正在使用指针循环遍历每个像素位置并进行设置。蓝色从 X 上的 0...255 开始,绿色从 Y 上的 0...255 开始。图像被初始化为这样。

Bitmap image = new Bitmap(256, 256);
imageData = image.LockBits(new Rectangle(0, 0, 256, 256),
ImageLockMode.ReadWrite, PixelFormat.Format24bppRgb);
for (int row = 0; row < 256; row++)
{
byte* ptr = (byte*)imageData.Scan0 + (row * 768);
for (int col = 0; col < 256; col++)
{
ptr[col * 3] = (byte)col;
ptr[col * 3 + 1] = (byte)(255 - row);
ptr[col * 3 + 2] = 0;
}
}

我有一个 slider ,它在红色时变为 0...255。在每次滚动时,它都会经历此循环并更新图像。

for (int row = 0; row < 256; row++)
{
byte* ptr = (byte*)imageData.Scan0 + (row * 768);
for (int col = 0; col < 256; col++)
{
ptr[col * 3 + 2] = (byte)trackBar1.Value;
}
}

我已经想出如何使用 ColorMatrix 来代替滚动部分,但是如何在不使用指针或 SetPixel 的情况下初始化图像?

最佳答案

首先,在窗体中添加PictureBox控件。

然后,这段代码将根据循环中的索引为每个像素分配不同的颜色,并将图像分配给控件:

Bitmap image = new Bitmap(pictureBox3.Width, pictureBox3.Height);
SolidBrush brush = new SolidBrush(Color.Empty);
using (Graphics g = Graphics.FromImage(image))
{
for (int x = 0; x < image.Width; x++)
{
for (int y = 0; y < image.Height; y++)
{
brush.Color = Color.FromArgb(x, y, 0);
g.FillRectangle(brush, x, y, 1, 1);
}
}
}
pictureBox3.Image = image;

由于某些原因,没有像我预期的那样 SetPixelDrawPixel,但是当您将其设置为 1x1 时,FillRectangle 将执行完全相同的操作要填充的尺寸。

请注意,它适用于小图像,但图像越大,速度越慢。

关于c# - 如何绘制图像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6639821/

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