BITMAPINFO * lpbmi = new BITMAPINFO现在我可以填充 lpbmi->bmiHeader;但是我怎么给 lpbmi->bmiColors 赋值呢?我用下面的方法不成功。RGBQUAD rgbArray[256];
for(int i = 0; i< 256; i++)
{
rgbArray[i].rgbBlue = i;
rgbArray[i].rgbGreen = i;
rgbArray[i].rgbRed = i;
rgbArray[i].rgbReserved = 0;
}//lpbmi->bmiColors = rgbArray[0]; 这样不行
//lpbmi->bmiColors = rgbArray; 这样也不行应该怎么样呢?
for(int i = 0; i< 256; i++)
{
rgbArray[i].rgbBlue = i;
rgbArray[i].rgbGreen = i;
rgbArray[i].rgbRed = i;
rgbArray[i].rgbReserved = 0;
}//lpbmi->bmiColors = rgbArray[0]; 这样不行
//lpbmi->bmiColors = rgbArray; 这样也不行应该怎么样呢?
解决方案 »
- 遍历子目录的问题啊,速来解决,在线等,送分~~~~~~~~~~~~
- 有没有考虑过IBM笔记本上的振动检测软件。。。。什么原理? 讨论一下。。。
- 如何通过编程修改本机ip地址和子网掩码及网关地址
- 如何获得当前用户的sid?
- ***散分,为了突破上传速度***
- 为什么我在模态对话框中用OnInitDialog()可以,在非模态中就不可以初始化了呢??
- 如何将24位的颜色转变为8位的颜色
- 模糊查询的问题?
- winapi gettcptable怎么用?
- 求高手指点!我用开发了一个OCX控件,然后插入到WORD里,怎么在这个控件里获得在WORD里对应的SHAPE指针啊?
- 一个VC++ API的群,大家帮忙顶一下。。。。。。。。。。。。。。。。。。。。
- 高分请求怎样在MFC下打开"打开目录"对话框?
void CCreateRandomBMPDlg::OnBtnCreateBMP()
{
CDC dc;
dc.CreateDC("DISPLAY", NULL, NULL, NULL);
CBitmap bm;
int Width = 800;//指定图片宽度
int Height = 600;//指定图片高度
bm.CreateCompatibleBitmap(&dc, Width, Height);
CDC tdc;
tdc.CreateCompatibleDC(&dc);
CBitmap* pOld = tdc.SelectObject(&bm);
tdc.BitBlt(0, 0, Width, Height, &dc, 0, 0, SRCCOPY);
tdc.SelectObject(pOld); BITMAP btm;
bm.GetBitmap(&btm);
DWORD size = btm.bmWidthBytes* btm.bmHeight;
LPSTR lpData = (LPSTR) GlobalAllocPtr(GPTR, size);
/////////////////////////////////////////////
/////////////////////////////////////////////
BITMAPINFOHEADER bih;
bih.biBitCount = btm.bmBitsPixel;
bih.biClrImportant = 0;
bih.biClrUsed = 0;
bih.biCompression = 0;
bih.biHeight = btm.bmHeight;
bih.biPlanes = 1;
bih.biSize = sizeof(BITMAPINFOHEADER);
bih.biSizeImage = size;
bih.biWidth = btm.bmWidth;
bih.biXPelsPerMeter = 0;
bih.biYPelsPerMeter = 0;
///////////////////////////////////
GetDIBits(dc, bm, 0, bih.biHeight, lpData, (BITMAPINFO *) &bih,
DIB_RGB_COLORS);
// bm.GetBitmapBits(size,lpData); //此函数在处理5-5-5模式的16位色下会出现颜色混乱
//////////////////////////////
//修改RGB值
int nWidth = btm.bmWidth * 4;
for (int i = 0; i < btm.bmHeight; i++)
{
for (int j = 0; j < btm.bmWidth; j++)
{
lpData[i * nWidth + j * 4 + 2] = GetRandomRGBValue(); //R
lpData[i * nWidth + j * 4 + 1] = GetRandomRGBValue(); //G
lpData[i * nWidth + j * 4] = GetRandomRGBValue(); //B
TRACE("\nR = %d; G = %d; B = %d\n",
lpData[i * nWidth + j * 4 + 2],
lpData[i * nWidth + j * 4 + 1], lpData[i * nWidth + j * 4]);
}
} static int filecount = 0;
CString name;
name = "D:\\Test.bmp";//m_Path+name;
BITMAPFILEHEADER bfh;
bfh.bfReserved1 = bfh.bfReserved2 = 0;
bfh.bfType = ((WORD) ('M' << 8) | 'B');
bfh.bfSize = 54 + size;
bfh.bfOffBits = 54; CFile bf;
if (bf.Open(name, CFile::modeCreate | CFile::modeWrite))
{
bf.WriteHuge(&bfh, sizeof(BITMAPFILEHEADER));
bf.WriteHuge(&bih, sizeof(BITMAPINFOHEADER));
bf.WriteHuge(lpData, size);
bf.Close();
}
GlobalFreePtr(lpData);
AfxMessageBox("Create BMP File Over!");
}
http://community.csdn.net/Expert/topic/3768/3768074.xml?temp=.1562921