一个关于位图的问题

来源:百度知道 编辑:UC知道 时间:2024/05/15 08:48:17
前提:知道位图的数据存在一个以Inbuffer[381744]的数组中,位图的一个像素的位数为8,位图的nWeith=792,nHeight=482.我想正确的显示这个位图,我通过m_bmp.CreateBitmap(792,482,1,8,Inbuffer),这样得到的位图显示的不正确,颜色不对。
我想通过下面几种方法来正确显示位图:
1.通过这些信息,来填写文件头,信息头和调色板,再和数据组成一个CBitmap。再来显示。
2.用替代法把另一个同样位图,把数据替换了。然后来显示。
3.修改调色板。
这三种方法哪种?又该具体用C++怎么写呢?本人比较菜啊。谢谢,能不能详细点啊。分数少了点,采纳后必多加。
ryw12403,怎么修改调色板的数据啊?具体的程序怎么实现的呢,谢谢。
chimmy869,pf为Inbuffer?inbuffer里面存的是位图的数据啊。

通过这些信息,来填写文件头,信息头和调色板,再和数据组成一个CBitmap。再来显示
HBITMAP CImageView::BufferToHBITMAP(unsigned char *pf, unsigned char **pd) //将内存中的BMP文件内容转换到HBITMAP pf为Inbuffer, pd返回数据域指针
{
HBITMAP hShowBMP;
BITMAPFILEHEADER bmfHeader;
unsigned char * hDIB;
DWORD bmfHeaderLen = sizeof(bmfHeader); //bmfHeader所占空间大小
strncpy((LPSTR)&bmfHeader,(LPSTR)pf,bmfHeaderLen); //复制文件头

if (bmfHeader.bfType != (*(WORD*)"BM"))
return NULL; //必须是BM
hDIB = pf + bmfHeaderLen; //跳到位图信息
BITMAPINFOHEADER &bmiHeader = *(LPBITMAPINFOHEADER)hDIB ; //信息头指针
BITMAPINFO &bmInfo = *(LPBITMAPINFO)hDIB ; // bitmap color-format data
m_pbmpInfo = &bmInfo; //传给全局变量以便后面调用
m_bmif=bmInfo.bmiHeader;
m_bmW = bmiHeader.biWidth; //存储位图大小
m_bmH = bmiHeader.biHeight;
*pd=(pf)+((BITMAPFILEHEADER *)pf)->bfOffBits; // pointer to initialization data

CClientDC dc(this);
hShowBMP = CreateDIBitmap(