结果应该是灰度图才对啊,怎么显示的图像里居然只有纯黑 纯白,还有....蓝色 ,急!!!!,哪位大虾救救阿,我已经被它折磨三天了
定义了这么一个彩色表
m_Quad=new RGBQUAD[NumberOfColors];
for(int j=0;j<256;j++)
{
m_Quad[j].rgbBlue=(unsigned char)j;
m_Quad[j].rgbGreen=(unsigned char)j;
m_Quad[j].rgbRed=(unsigned char)j;
m_Quad[j].rgbReserved=0;
}
然后创建调色板:
//创建调色板:
BOOL CDib::CreatePalette()
{
if(m_BmpInfo==0)
{
return FALSE;
}
if(BPP>=16)
{
return TRUE;
}
DWORD i;
//allocate memory block for logical palette
LPLOGPALETTE lpPal=(LPLOGPALETTE)new BYTE[sizeof(LOGPALETTE)+
sizeof(PALETTEENTRY)
*NumberOfColors];
//if not enough memory,clean up and return NULL
if(lpPal==0)
{
return FALSE;
}
//set version and number of palette entries
lpPal->palVersion=PALVERSION;
lpPal->palNumEntries=(WORD)NumberOfColors;
for(i=0;i<NumberOfColors;i++)
{
lpPal->palPalEntry[i].peRed = m_Quad[i].rgbRed;
lpPal->palPalEntry[i].peGreen = m_Quad[i].rgbGreen;
lpPal->palPalEntry[i].peBlue = m_Quad[i].rgbBlue;
lpPal->palPalEntry[i].peFlags = 0;
}
/*create the palette and get handle to it*/
if(m_hPal)
{
::DeleteObject((HGDIOBJ)m_hPal);
}
m_hPal=::CreatePalette(lpPal);
if(!m_hPal)
{
return FALSE;
}
delete [] lpPal;
return TRUE;
}
最后把它画出来
BOOL CDib::Draw(HDC hDC,LPRECT rcDest,LPRECT rcSrc)
{
if(!m_BmpLoaded)
{
return FALSE;
}
HPALETTE hOldPal = 0;//旧调色板;
//获取DIB的调色板,然后将其选入设备环境:
if(m_hPal!=0)
{
hOldPal = ::SelectPalette(hDC,m_hPal,TRUE);
}
//使用最适合于颜色位图的显示方式:
::SetStretchBltMode(hDC,COLORONCOLOR);
//确定是使用StretchDIBits()还是SetDIBits To Device():
BOOL Ok;
if((RECTWIDTH(rcDest) == RECTWIDTH(rcSrc))&&
(RECTHEIGHT(rcDest) == RECTHEIGHT(rcSrc)))
{
Ok=::SetDIBitsToDevice(hDC,//hDC
rcDest-
>left,//DestX
rcDest-
>top,//DestY
RECTWIDTH
(rcDest),//nDestWidth
RECTHEIGHT
(rcDest),//nDestHeight
rcSrc-
>left,//nDestHeight
Height-rcSrc-
>top-RECTHEIGHT(rcSrc),//SrcY
0,//nStartScan
(WORD)
Height,//nNumScans
m_Buffer,//lpBits
m_BmpInfo,//lpBitsInfo
DIB_RGB_COLORS//wUsage
);
}
else
{
Ok=::StretchDIBits(hDC,//hDC
rcDest->left,//DestX
rcDest->top,//DestY
RECTWIDTH
(rcDest),//nDestWidth
RECTHEIGHT
(rcDest),//nDestHeight
rcSrc->left,//SrcX
rcSrc->top,//SrcY
RECTWIDTH
(rcSrc),//wSrcWidth
RECTHEIGHT
(rcSrc),//wSrcHeight
m_Buffer,//lpBits
m_BmpInfo,//lpBitsInfo
DIB_RGB_COLORS,//wUsage
SRCCOPY //dwROP
);
}
/*Reselect old palette*/
if(hOldPal!=0)
{
::SelectPalette(hDC,hOldPal,TRUE);
}
return Ok;
}
结果应该是灰度图才对啊,怎么显示的图像里居然只有纯黑 纯白,还有....蓝色
(晕) ,哪位大虾救救阿,我已经被它折磨三天了
问题点数:100、回复次数:3Top
1 楼yoogle(离谱)回复于 2006-05-04 08:10:07 得分 15
for(i=0;i<NumberOfColors;i++)
{
lpPal->palPalEntry[i].peRed = m_Quad[i].rgbRed;
lpPal->palPalEntry[i].peGreen = m_Quad[i].rgbGreen;
lpPal->palPalEntry[i].peBlue = m_Quad[i].rgbBlue;
lpPal->palPalEntry[i].peFlags = 0;
}
/*create the palette and get handle to it*/
if(m_hPal)
{
::DeleteObject((HGDIOBJ)m_hPal);
}
m_hPal=::CreatePalette(lpPal);
----------------------
你赋值给lpPal,但是用的却是m_hPal.这里是问题吧?Top
2 楼yoogle(离谱)回复于 2006-05-04 08:14:03 得分 0
阿,我看错了,sorrry.Top
3 楼jszj(老板说mis部不是赚钱的部门...)回复于 2006-05-04 10:11:03 得分 85
觉得是 m_BmpInfo 的问题,这里面的调色板你没有换,所以显示的图象是你的 这个图象而不是你创建 的调色板的那个图象Top




