用双缓冲的话 BitBlt 是不是不支持png图像从缓冲DC复制到DC?
那该怎么处理啊? 一开始我用GDI+的方式操作,但是显示不出图像.后来 我试着用atlimage.h里的 CImage cimg;
cimg.Load(fileName);
HBITMAP hbmp=cimg.Detach(); 这样据说可以像操作 BMP 图片一样处理图片 读是读出来了,可那样得到的是一个不具有透明通道的bmp图像,也就是说还是没办法正常使用win32应用
那该怎么处理啊? 一开始我用GDI+的方式操作,但是显示不出图像.后来 我试着用atlimage.h里的 CImage cimg;
cimg.Load(fileName);
HBITMAP hbmp=cimg.Detach(); 这样据说可以像操作 BMP 图片一样处理图片 读是读出来了,可那样得到的是一个不具有透明通道的bmp图像,也就是说还是没办法正常使用win32应用
有函数可以做透明处理 只要背景色是单色就行
先把你要处理的图片复制一张,对这两张图片这样处理。一张:除要显示的位置以外的区域用黑色填充,另一张:把要显示的位置用黑色填充,其余区域用白色填充。完了之后就可以用bitbit显示了。
HBITMAP pic1;
HBITMAP pic2;
///导入图片(这里也可以加入到资源里用LoadBitmap(hInst, MAKEINTRESOURCE(ID号));)
pic1 = (HBITMAP)LoadImage(NULL, "图片1位置", IMAGE_BITMAP, 图片长, 图片宽
, LR_LOADFROMFILE);
pic2 = (HBITMAP)LoadImage(NULL, "图片2位置", IMAGE_BITMAP, 图片长, 图片宽
, LR_LOADFROMFILE);HDC mapdc;
HDC buffdc;
HDC hdc;hdc = GetDC(hWnd);
mapdc = CreateCompatibleDC(hdc);
buffdc = CreateCompatibleDC(hdc);
SelectObject(buffdc , pic1);
BitBlt(mapdc, 0, 0, 图片长, 图片宽, buffdc, 0, 0, SRCAND);
SelectObject(buffdc , pic2);
BitBlt(mapdc, 0, 0, 图片长, 图片宽, buffdc, 0, 0, SRCPAINT);
///
BitBlt(hdc, 0, 0, 图片长, 图片宽, mapdc, 0, 0, SRCPAINT);
试试效果吧,透明效果搞定,双缓冲搞定,加载图片时不要加反了哈,反了可达不到效果哦。~_~不知道是不是LZ想要的。
//先从文件名(即你的PNG图像文件)创建一个Bitmap对象
Bitmap bmp=new Bitmap("filename.png");
//然后再获取一个Graphics对象(它表示要显示的图像的绘图表面)用其DrawImage方法
Graphics graphic =e.Graphics;
graphic.DrawImage(bmp,0,0);