某些PNG图片在CImage下会显示不出透明色,如果是这样,你的PNG需要重新制作。
解决方案 »
- 在MFC中如何对静态文本static进行编辑,跟帖有分
- 请问: 关于 DirectSound CreateSoundBuffer函数报错
- OCX如何实现回调函数?
- 如何把一个应用程序转换成ActiveX?-80分,当天结贴---只有80分了
- 用NetShareGetInfo获取共享目录的实际路径, 出错.帮忙看看代码
- CListCtrl如何不要head?
- 小问题!
- 谁知道针对oracle数据库较好的第三方控件?
- 在VC中如何获得当前日期?
- *.scm是什么文件用什么打开?据说是用demostation,但demostation是什么?哪儿有?
- VC版1颗星以上的用户有多少?
- 如何根据经纬高计算两点之间的距离?
我单独输出png是有半透明的。我想知道代码里面有什么问题
HDC hdcMemory = ::CreateCompatibleDC(hDC); BITMAPINFOHEADER stBmpInfoHeader = { 0 };
int nBytesPerLine = ((szWin.cx * 32 + 31) & (~31)) >> 3;
stBmpInfoHeader.biSize = sizeof(BITMAPINFOHEADER);
stBmpInfoHeader.biWidth = szWin.cx;
stBmpInfoHeader.biHeight = szWin.cy;
stBmpInfoHeader.biPlanes = 1;
stBmpInfoHeader.biBitCount = 32;
stBmpInfoHeader.biCompression = BI_RGB;
stBmpInfoHeader.biClrUsed = 0;
stBmpInfoHeader.biSizeImage = nBytesPerLine * szWin.cy;
PUINT32 pvBits = NULL;
HBITMAP hbmpMem = ::CreateDIBSection(NULL, (PBITMAPINFO)&stBmpInfoHeader, DIB_RGB_COLORS, (LPVOID*)&pvBits, NULL, 0);
draw到这个内存DC后 最后将内存DC draw到 窗口DC上, 才能双缓冲
怎么关联到CImage上去呢?
bottom是已经载入好的CImage对象。
另外你说的CompatibleDC我不太懂,能不能详细说下
解决的办法我已经有了,创建一个屏幕缓冲区(CImage),将其他贴图都绘制到这个缓冲区中,最后将合成的图在绘制到窗体客户区或屏幕上。CDC *pDC = GetDC();
//创建缓冲区
CImage screen;
CImage layer1,layer2;
layer1.Load("....png");
layer2.Load("....png");
layer1.Draw(screen.GetDC(),0,0);
layer2.Draw(screen.GetDC(),10,10);
screen.ReleaseDC();//输出到窗体上
Bitblt(pDC->m_hDC,0,0,screen.GetDC(),0,0);
screen.ReleaseDC();
ReleaseDC(pDC);