通过一维字节数组中的坐标(x,y)设置像素颜色

问题描述 投票:0回答:1

有人知道我做错了什么吗?我试图通过 1D 字节数组上的 (x, y) 坐标更改像素颜色,但我无法成功,像素分散在各处。

这是我的文件头:

file.Write(
    new byte[62]
    {
        0x42, 0x4d,
        0x3e, 0xf4, 0x1, 0x0,
        0x0, 0x0, 0x0, 0x0,
        0x3e, 0x0, 0x0, 0x0,
        0x28, 0x0, 0x0, 0x0,
        0xe8, 0x3, 0x0, 0x0,
        0xe8, 0x3, 0x0, 0x0,
        0x1, 0x0,
        0x1, 0x0,
        0x0, 0x0, 0x0, 0x0,
        0x0, 0xf4, 0x0, 0x0,
        0x0, 0x0, 0x0, 0x0,
        0x0, 0x0, 0x0, 0x0,
        0x0, 0x0, 0x0, 0x0,
        0x0, 0x0, 0x0, 0x0,
        0xff, 0x0, 0x0, 0x0,
        0x0, 0x0, 0xff, 0x0});

这是我的字节数组:

int width = 1000;
int height = 128;

var t = new byte[width * height];

这是设置像素的方法(我很确定计算是错误的,我可能需要包含更多地图信息,但我不确定是什么):

static void SetPixel(byte[] img, int x, int y, int width, int height)
{
    if (x >= 0 && x < width && y >= 0 && y < height)
    {
        Console.WriteLine($"{x} {y}");

        int index = (y * width + x);
        img[index] = 0x1; 
    }
}

最后,这是我如何调用该方法:

 SetPixel(t, 1, 0, width, height);

我尝试了很多网上找到的解决方案,但没有一个有帮助。尝试调整宽度、高度。

c# bmp
1个回答
0
投票

如果我正确解释数据,您正在创建一个位图文件。您已将值

Bits per Pixel
设置为 1;但是,您为每个像素添加一个字节。因此,您应该将此值设置为 8(1 个字节 = 8 位)。

© www.soinside.com 2019 - 2024. All rights reserved.