上个帖子中网友:网友:kimryo(A Taste Of Dream)给出的处理方法。
缺点是:图像画到窗口外。并不是再程序的窗口内。不是很理想 方法:
BITMAPINFO bif;
ZeroMemory(&bif,sizeof(bif));
bif.bmiHeader.biHeight=20;
bif.bmiHeader.biWidth=20;
bif.bmiHeader.biBitCount=24;
bif.bmiHeader.biCompression=BI_RGB;
bif.bmiHeader.biPlanes=1;
bif.bmiHeader.biSize=sizeof(bif);HDC hDC=::GetDC(0),hSrcDC=CreateCompa..DC(NULL);
bmp=::CreateDIBitmap(hSrcDC,&(bif.bmiHeader),CBM_INIT,pDIB/*你的dib段*/,&bif,
DIB_RGB_COLORS);
HGDIOBJ hObj=SelectObject(hSrcDC,bmp);
BitBlt(hDC,0,0,20,20,hSrcDC,0,0,SRCCOPY);
SelectObject(hSrcDC,hObj);
DeleteObject(bmp);
::ReleaseDC(NULL,hDC);
DeleteDC(hSrcDC);网友qindq(蜕叟)提到的,我希望能够说得再详细一些。我也会不断的试验。 比较复杂但高效的方法:
构造一个int StretchDIBits();需要的BITMAPINFO, lpBits参数;
typedef struct tagBITMAPINFO {
BITMAPINFOHEADER bmiHeader;
RGBQUAD bmiColors[256];
} BITMAPINFO, *PBITMAPINFO;其中bmiColors[i].rgbRed = bmiColors[i].rgbBlue = bmiColors[i].rgbGreen = i;lpBits就是你的颜色缓冲区
我也要活命呀,哈哈
缺点是:图像画到窗口外。并不是再程序的窗口内。不是很理想 方法:
BITMAPINFO bif;
ZeroMemory(&bif,sizeof(bif));
bif.bmiHeader.biHeight=20;
bif.bmiHeader.biWidth=20;
bif.bmiHeader.biBitCount=24;
bif.bmiHeader.biCompression=BI_RGB;
bif.bmiHeader.biPlanes=1;
bif.bmiHeader.biSize=sizeof(bif);HDC hDC=::GetDC(0),hSrcDC=CreateCompa..DC(NULL);
bmp=::CreateDIBitmap(hSrcDC,&(bif.bmiHeader),CBM_INIT,pDIB/*你的dib段*/,&bif,
DIB_RGB_COLORS);
HGDIOBJ hObj=SelectObject(hSrcDC,bmp);
BitBlt(hDC,0,0,20,20,hSrcDC,0,0,SRCCOPY);
SelectObject(hSrcDC,hObj);
DeleteObject(bmp);
::ReleaseDC(NULL,hDC);
DeleteDC(hSrcDC);网友qindq(蜕叟)提到的,我希望能够说得再详细一些。我也会不断的试验。 比较复杂但高效的方法:
构造一个int StretchDIBits();需要的BITMAPINFO, lpBits参数;
typedef struct tagBITMAPINFO {
BITMAPINFOHEADER bmiHeader;
RGBQUAD bmiColors[256];
} BITMAPINFO, *PBITMAPINFO;其中bmiColors[i].rgbRed = bmiColors[i].rgbBlue = bmiColors[i].rgbGreen = i;lpBits就是你的颜色缓冲区
我也要活命呀,哈哈
在我api中定义(创建)一个同样大小的bmp图像,然后在把我想要显示的数据拷贝到bmpBits地址内,来个偷梁换柱。
另外一种是象素数据缺少头信息我就创建一个调色板和Info然后用就象上边提到的。
在书的开头一个显示图像的例子,就是load 然后就显示。
谢谢了。