BITMAPINFO bmi ;
DWORD dwInfoSize ;
dwInfoSize = sizeof (BITMAPINFOHEADER) ;
ZeroMemory (&bmi, dwInfoSize) ; CRect rect;
GetClientRect(&rect);
bmi.bmiHeader.biSize = sizeof (BITMAPINFOHEADER) ;
bmi.bmiHeader.biWidth = rect.Width() ;
bmi.bmiHeader.biHeight = rect.Height() ;
bmi.bmiHeader.biPlanes = 1 ;
bmi.bmiHeader.biBitCount = 32;
bmi.bmiHeader.biCompression = BI_RGB ;
bmi.bmiHeader.biSizeImage = 0 ;
bmi.bmiHeader.biXPelsPerMeter = 0 ;
bmi.bmiHeader.biYPelsPerMeter = 0 ;
bmi.bmiHeader.biClrUsed = 0 ;
bmi.bmiHeader.biClrImportant = 0 ; HBITMAP hBitmap = CreateDIBSection (NULL, &bmi, DIB_RGB_COLORS, (void**)_colors, NULL, 0); HDC hdc = GetDC()->GetSafeHdc(); SetDIBits(hdc,hBitmap,0,rect.Width()*rect.Height(),_colors,&bmi,DIB_RGB_COLORS);
但是颜色就是出不来,麻烦各位指点下哪里出错了,万分感谢!
HDC hdc = GetDC()->GetSafeHdc();
CDC *cDC = GetDC();
CBitmap bufferPic;
bufferPic.CreateCompatibleBitmap ( cDC, rect.Width(), rect.Height());
//cDC->SelectObject(&bufferPic);
SetDIBits(hdc,bufferPic,0,0,_colors,&bmi,DIB_RGB_COLORS);也不行
就是我colors都是自己写进去的RGB值 是二维的 这个倒是可以转换为一维
但是测试了下貌似还是出不来 晕了
bmi.bmiHeader.biSizeImage = iWidth*iHeight *4 ;
但是还是一样的
int iWidth = rect.Width(), iHeight = rect.Height();
bmi.bmiHeader.biSize = sizeof (BITMAPINFOHEADER) ;
bmi.bmiHeader.biWidth = iWidth;
bmi.bmiHeader.biHeight = -iHeight ;
bmi.bmiHeader.biPlanes = 1 ;
bmi.bmiHeader.biBitCount = 32;
bmi.bmiHeader.biCompression = BI_RGB ;
bmi.bmiHeader.biSizeImage = iWidth*iHeight *4 ;
//bmi.bmiHeader.biXPelsPerMeter = 0 ;
//bmi.bmiHeader.biYPelsPerMeter = 0 ;
bmi.bmiHeader.biClrUsed = 0 ;
bmi.bmiHeader.biClrImportant = 0 ;按照你那个例子该过了 是不是二维数组的问题?
DWORD dwInfoSize ;
dwInfoSize = sizeof (BITMAPINFOHEADER) ;
ZeroMemory (&bmi, dwInfoSize) ; CRect rect;
GetClientRect(&rect);
bmi.bmiHeader.biSize = sizeof (BITMAPINFOHEADER) ;
bmi.bmiHeader.biWidth = rect.Width() ;
bmi.bmiHeader.biHeight = rect.Height() ;
bmi.bmiHeader.biPlanes = 1 ;
bmi.bmiHeader.biBitCount = 32;
bmi.bmiHeader.biCompression = BI_RGB ;
bmi.bmiHeader.biSizeImage = 0 ;
bmi.bmiHeader.biXPelsPerMeter = 0 ;
bmi.bmiHeader.biYPelsPerMeter = 0 ;
bmi.bmiHeader.biClrUsed = 0 ;
bmi.bmiHeader.biClrImportant = 0 ; HDC hdc = GetDC()->GetSafeHdc(); ::SetDIBitsToDevice(hdc, 0, 0, rect.Width(), rect.Height(), 0, 0, 0, rect.Height(), _colors, &bmi, DIB_RGB_COLORS);
COLORREF *colors = new COLORREF[iWidth * iHeight];
for(int i=0; i<iWidth*iHeight; i++)
colors[i] = 255;
HDC hDC = GetDC()->GetSafeHdc();
HBITMAP hBitmap = CreateDIBSection (hDC, &bmi, DIB_RGB_COLORS, (void**)&colors, NULL, 0);
//HBITMAP hGray = ::CreateCompatibleBitmap(hDC, iWidth, iHeight);
//SetDIBits(hDC,hBitmap,0,iHeight,colors,&bmi,DIB_RGB_COLORS);
::SetDIBitsToDevice(hDC, 0, 0, rect.Width(), rect.Height(), 0, 0, 0, rect.Height(), (void*)colors, &bmi, DIB_RGB_COLORS);我这样试了下 但是颜色是黑的 不管怎么改都是黑