Windows 单色位图SetPixel/GetPixel问题。。。Win32 C代码

Windows 单色位图SetPixel/GetPixel问题。。。Win32 C代码,windows,bitmap,winapi,bitmask,Windows,Bitmap,Winapi,Bitmask,这是我的一些位掩码代码(单色位图)。Bitmask_Create()函数没有问题。我用打开、加载和保存windows单色位图对它进行了测试,效果非常好。然而,我所做的GetPixel和SetPixel函数似乎并不正常。在某些情况下,根据位图的尺寸,它们似乎可以正常工作 如果有人能帮忙,我将不胜感激。这快把我逼疯了。 谢谢 typedef struct\u GL\u位掩码GL\u位掩码; 结构GL位掩码{ int nWidth;//以像素为单位的宽度 int nHeight;//以像素为单位的高度

这是我的一些位掩码代码(单色位图)。Bitmask_Create()函数没有问题。我用打开、加载和保存windows单色位图对它进行了测试,效果非常好。然而,我所做的GetPixel和SetPixel函数似乎并不正常。在某些情况下,根据位图的尺寸,它们似乎可以正常工作

如果有人能帮忙,我将不胜感激。这快把我逼疯了。 谢谢

typedef struct\u GL\u位掩码GL\u位掩码;
结构GL位掩码{
int nWidth;//以像素为单位的宽度
int nHeight;//以像素为单位的高度
int nPitch;//以字节为单位的扫描线宽度(可能有额外的填充以与DWORD对齐)
BYTE*pData;//指向第一条扫描线的第一个字节的指针(自上而下)
};
整数位掩码\u GetPixel(GL\u位掩码*pBitMask,整数x,整数y)
{
INT-neelement=((y*pBitMask->nPitch)+(x/8));
PBYTE-pElement=pBitMask->pData+neelement;
字节bMask=1 nPitch;
PBYTE pElement=pBitMask->pData+nScanLineOffset+neElement;
字节bMask=1 nPitch=nPitch;
pBitMask->nWidth=nWidth;
pBitMask->nHeight=nHeight;
pBitMask->pData=(PBYTE)pBitMask+sizeof(GL_位掩码);
返回pBitMask;
}

我认为你计算音高的公式有点不正确。当宽度是8的倍数时,它会起作用,但在其他情况下则不起作用。尝试:

nPitch = ((nWidth + 31) / 8) & ~3;

我认为你计算音高的公式有点不正确。当宽度是8的倍数时,它会起作用,但在其他情况下则不起作用。尝试:

nPitch = ((nWidth + 31) / 8) & ~3;

我想出来了。。。我在SetPixel()中对nPixelColor进行了两次反向测试


我想出来了。。。我在SetPixel()中对nPixelColor进行了两次反向测试


我更改了基音代码,但SetPixel和GetPixel函数仍然不起作用。。。当我保存位图时,它是黑色的。。。位图保存功能运行良好;我已经从加载到位掩码缓冲区的位图中测试了它。(不过,谢谢你的建议)我更改了基音代码,但是SetPixel和GetPixel函数仍然不起作用。。。当我保存位图时,它是黑色的。。。位图保存功能运行良好;我已经从加载到位掩码缓冲区的位图中测试了它。(不过,谢谢你的建议)
if(*pElement & bMask)
{
    if(nPixelColor) return; // this was !nPixelColor
    else *pElement ^= bMask;
}
else
{
    if(!nPixelColor) return; // this was nPixelColor
    else *pElement |= bMask;
}