MSpaint图像在C#is+;1字节,为什么?

MSpaint图像在C#is+;1字节,为什么?,c#,image,bitmap,byte,stride,C#,Image,Bitmap,Byte,Stride,关于C#中的一些基于像素的操作,我有一个问题。 我写了一个类,它作为一个图像外壳围绕着一个。它可以为您提供图像中某个(x,y)位置的像素的RGB值,速度比位图快得多。GetRGB(x,y)颜色对象通过使用和直接访问图像数组并从中读取字节。我添加了这个函数来获取(x,y)像素处0x00RRGGBB遮罩中的RGB public不安全int-getPixel(int x,int y) { 字节*imgPointer=(字节*)bmpData.Scan0; int pixelPos=0; 如果(y>0)

关于C#中的一些基于像素的操作,我有一个问题。 我写了一个类,它作为一个图像外壳围绕着一个。它可以为您提供图像中某个(x,y)位置的像素的RGB值,速度比位图快得多。GetRGB(x,y)颜色对象通过使用和直接访问图像数组并从中读取字节。我添加了这个函数来获取(x,y)像素处
0x00RRGGBB
遮罩中的RGB

public不安全int-getPixel(int x,int y)
{
字节*imgPointer=(字节*)bmpData.Scan0;
int pixelPos=0;
如果(y>0)pixelPos+=(y*bmpData.Stride);
pixelPos+=x*(hasAlpha?4:3);
蓝色整数=*(imgPointer+pixelPos);
绿色整数=*(imgPointer+pixelPos+1);
int red=*(imgPointer+pixelPos+2);
int rgb=红色来自:

跨距是一行像素(扫描线)的宽度,向上舍入为四字节边界。如果跨距为正,则位图为自上而下。如果跨距为负,则位图为自下而上。

因此,步幅始终是4的倍数,对于3x5,步幅将四舍五入到16

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;
    }