gpt4 book ai didi

c# - C# 中 MSpaint 图像的图像步幅为 +1 字节,为什么?

转载 作者:行者123 更新时间:2023-11-30 22:19:56 29 4
gpt4 key购买 nike

我对 C# 中一些基于像素的操作有疑问。我写了一个类作为 Bitmap 的图像外壳。 .通过使用 BitmapData,它可以比 Bitmap.GetRGB(x,y) 颜色对象更快地为您提供图像中某个 (x,y) 位置处像素的 RGB 值。和 LockBits直接访问图像数组并从那里读取字节。我添加了此函数以在 (x,y) 像素处获取 0x00RRGGBB 掩码中的 RGB。

public unsafe int getPixel(int x, int y)
{
byte* imgPointer = (byte*)bmpData.Scan0;
int pixelPos = 0;
if (y > 0) pixelPos += (y * bmpData.Stride);
pixelPos += x * (hasAlpha ? 4 : 3);

int blue = *(imgPointer + pixelPos);
int green = *(imgPointer + pixelPos + 1);
int red = *(imgPointer + pixelPos + 2);

int rgb = red << 16;
rgb += green << 8;
rgb += blue;

return rgb;
}

除了我使用 MSPaint 生成的任何图像之外,这对我迄今为止处理过的所有图像都完美无缺。例如,我用油漆制作了一张 5x1 的图像,其中包含 5 种黄色阴影。但是,当我将此图像加载到我的程序中时,图像步幅为 16!我怀疑它是 15(每个像素 3 个字节,5 个像素)但出于某种原因在前三个字节(第一个像素)之后有一个额外的字节,然后其余像素在数组中。

我只在 MSpaint 保存的图像中找到了这个,我希望有人能解释我这个额外字节的用途以及如何检测这个额外字节。

最佳答案

来自 MSDN :

步长是单行像素(扫描线)的宽度,四舍五入到四字节边界。如果步幅为正,则位图是自上而下的。如果步幅为负,则位图为自下而上。

所以步幅始终是 4 的倍数,对于您的 3x5,将四舍五入为 16。

关于c# - C# 中 MSpaint 图像的图像步幅为 +1 字节,为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15300371/

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