BITMAP bm; m_pBitmap->LoadBitmap(IDB_GOLDWEAVE); m_pdcMemory->CreateCompatibleDC(&dc); m_pdcMemory->SelectObject(m_pBitmap); m_pBitmap->GetObject(sizeof(bm), &bm); WORD index=bm.bmPlanes;//不知道这个是不是你想要的。参数的意思MSDN这样解释: bmPlanes Specifies the count of color planes.
m_pBitmap->LoadBitmap(IDB_GOLDWEAVE);
m_pdcMemory->CreateCompatibleDC(&dc);
m_pdcMemory->SelectObject(m_pBitmap);
m_pBitmap->GetObject(sizeof(bm), &bm);
WORD index=bm.bmPlanes;//不知道这个是不是你想要的。参数的意思MSDN这样解释:
bmPlanes
Specifies the count of color planes.
访问调色板对应结构体中的变量应该可以得到。具体的就自己搞吧
LPSTR lpDIB;
// 指向DIB象素指针
LPSTR lpDIBBits;
// 锁定DIB
lpDIB = (LPSTR) ::GlobalLock((HGLOBAL) m_hDIB); // 找到DIB图像象素起始位置
lpDIBBits = ::FindDIBBits(lpDIB); // 指向源图像的指针
unsigned char* lpSrc;
// 循环变量
LONG i;
LONG j;
// 图像每行的字节数
LONG lLineBytes;
// 中间变量
int fTemp;
// 计算图像每行的字节数
lLineBytes = WIDTHBYTES(::DIBWidth(lpDIB) * 8);
// 每行
for(i = 0; i < (int)::DIBHeight(lpDIB); i++)
{
// 每列
for(j = 0; j < (int)::DIBWidth(lpDIB); j++)
{
// 指向DIB第i行,第j个象素的指针
lpSrc = (unsigned char*)lpDIBBits + lLineBytes * (::DIBHeight(lpDIB) - 1 - i) + j;
fTemp =索引值;
// 判断是否超出范围
if (fTemp > 255)
{
// 直接赋值为255
*lpSrc = 255;
}
else if (fTemp < 0)
{
// 直接赋值为0
*lpSrc = 0;
}
else
{
// 四舍五入
*lpSrc = (unsigned char) (fTemp + 0.5);
}
}
}
::GlobalUnlock((HGLOBAL) m_hDIB);
其中将下列函数放入globals文件夹
LPSTR WINAPI FindDIBBits(LPSTR lpbi)
{
return (lpbi + *(LPDWORD)lpbi + ::PaletteSize(lpbi));
}
DWORD WINAPI DIBHeight(LPSTR lpDIB)
{
// 指向BITMAPINFO结构的指针(Win3.0)
LPBITMAPINFOHEADER lpbmi;
// 指向BITMAPCOREINFO结构的指针
LPBITMAPCOREHEADER lpbmc; // 获取指针
lpbmi = (LPBITMAPINFOHEADER)lpDIB;
lpbmc = (LPBITMAPCOREHEADER)lpDIB; // 返回DIB中图像的宽度
if (IS_WIN30_DIB(lpDIB))
{
// 对于Windows 3.0 DIB,返回lpbmi->biHeight
return lpbmi->biHeight;
}
else
{
// 对于其它格式的DIB,返回lpbmc->bcHeight
return (DWORD)lpbmc->bcHeight;
}
}DWORD WINAPI DIBWidth(LPSTR lpDIB)
{
// 指向BITMAPINFO结构的指针(Win3.0)
LPBITMAPINFOHEADER lpbmi;
// 指向BITMAPCOREINFO结构的指针
LPBITMAPCOREHEADER lpbmc; // 获取指针
lpbmi = (LPBITMAPINFOHEADER)lpDIB;
lpbmc = (LPBITMAPCOREHEADER)lpDIB; // 返回DIB中图像的宽度
if (IS_WIN30_DIB(lpDIB))
{
// 对于Windows 3.0 DIB,返回lpbmi->biWidth
return lpbmi->biWidth;
}
else
{
// 对于其它格式的DIB,返回lpbmc->bcWidth
return (DWORD)lpbmc->bcWidth;
}
}