怎么将指向图像数据首地址的图像数据指针和位图对应起来

如何将指向图像数据首地址的图像数据指针和位图对应起来
pData为图像数据指针,指向内存中图像数据的首地址,可以从这个地址开始读取图像数据的灰度值,然后可以再用位图的方式做显示。

思路是有,但是现在如何将这个指针和位图相关部分对应起来还不是很明白。

有种说法是建立一个位图,把头全部填充好,然后数据区用pData填充,这似乎是可以的。但如何执行?有什么更具体的方法么?

求问呐怎么将指向图像数据首地址的图像数据指针和位图对应起来

------解决方案--------------------
有个叫 CreateDIBSection 的API哦。
会直接返回一个ppvBits,再把你的数据memcpy给它就行了。
------解决方案--------------------
通过调用GetBits类似的方法得到位图数据指针,然后将先前得到的图像数据进行memcpy就ok了
------解决方案--------------------
BITMAPINFOHEADER bmih;
::ZeroMemory(&bmih, sizeof(BITMAPINFOHEADER));
bmih.biSize = sizeof(BITMAPINFOHEADER);
bmih.biBitCount = 32;  
bmih.biWidth =  nDestWidth;
bmih.biHeight = nDestHeight * -1;
bmih.biCompression = BI_RGB;
bmih.biPlanes = 1;
BYTE* lpBits = NULL;

HBITMAP hBitmap = ::CreateDIBSection(NULL,(BITMAPINFO*)&bmih, DIB_RGB_COLORS, (void**)&lpBits, NULL, 0 );
if (NULL == hBitmap 
------解决方案--------------------
 NULL == lpBits)
return false;

然后将图像数据拷贝给 lpBits.(拷贝数据时,注意你的数据格式与创建的图片格式有可能不同)
这样这个hBitmap就能被选入HDC,再调用BitBlt或者 StretchBlt等都可以

------解决方案--------------------
memcpy(lpBits,m_imageRaw.pData,sizeof(m_imageRaw.iCols*m_imageRaw.iRows)); 
这里面不止宽*高, 一个像素可是 4 个字节哟(如果是32位图片的话)
------解决方案--------------------
上一段我的保存BMP代码,希望对楼主有帮助



int temBgBitmapX = NewBgBitmapX / 10 * 10;
int temBgBitmapY = NewBgBitmapY / 10 * 10;

//定义图形大小
int iWidth = temBgBitmapX;
int iHeight = temBgBitmapY;
int iPixel = 16;
//图形格式参数
LPBITMAPINFO lpbmih = new BITMAPINFO;
lpbmih->bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
lpbmih->bmiHeader.biWidth = iWidth;
lpbmih->bmiHeader.biHeight = iHeight;
lpbmih->bmiHeader.biPlanes = 1;
lpbmih->bmiHeader.biBitCount = iPixel;
lpbmih->bmiHeader.biCompression = BI_RGB;
lpbmih->bmiHeader.biSizeImage = 0;
lpbmih->bmiHeader.biXPelsPerMeter = 0;
lpbmih->bmiHeader.biYPelsPerMeter = 0;
lpbmih->bmiHeader.biClrUsed = 0;
lpbmih->bmiHeader.biClrImportant = 0;

//创建位图数据
HDC hdc,hdcMem;
HBITMAP hBitMap = NULL;
CBitmap *pBitMap = NULL;      
CDC *pMemDC = NULL;
BYTE *pBits;

hdc = CreateIC(TEXT("DISPLAY"),NULL,NULL,NULL);
hdcMem = CreateCompatibleDC(hdc);
hBitMap = CreateDIBSection(hdcMem,lpbmih,DIB_PAL_COLORS,(void **)&pBits,NULL,0);
pBitMap = new CBitmap;
pBitMap->Attach(hBitMap);
pMemDC = new CDC;
pMemDC->Attach(hdcMem);
pMemDC->SelectObject(pBitMap);

CRect rc(0,0,iWidth,iHeight);
pMemDC->SetBkMode(TRANSPARENT);
//画出所要图像 
DrawGIS(pMemDC,rc);
//保存到文件并创建位图结构
BITMAPFILEHEADER bmfh;
ZeroMemory(&bmfh,sizeof(BITMAPFILEHEADER));