关于GDI+内存贴图的问题!!!!!!!!!!!!!!!!!!! 本帖最后由 xyzhaopeng 于 2010-10-08 11:10:04 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 楼主是不是要用TransparentBlt? 不是的,我的意思是说用GDI+绘图的时候PNG格式的图片是看不到背景的,用内存贴图的方式就会看见PNG图片的背景,如何将这个背景去掉 pDC->BitBlt(0,0,imgWidth,imgHigh,&m_memDC,0,0,SRCCOPY);改为pDC->BitBlt(0,0,imgWidth,imgHigh,&m_memDC,0,0,SRCPAINT); 应该是说把整个窗口(pDC)当前的图像作为背景先画到缓存里,然后再在缓存里画png,最后将缓存里的内容贴到pDC里。 我也遇到这种问题我想是因为 gdi+ 绘制时把png转成bmp的时候,留下了背景,png透明有个渐变的过程 转成bmp就会有不同的颜色来处理了。 http://hi.baidu.com/dyqq1234/blog/item/89f7008027b944d3bd3e1e6c.html http://hi.baidu.com/dyqq1234/blog/item/89f7008027b944d3bd3e1e6c.html http://hi.baidu.com/dyqq1234/blog/item/89f7008027b944d3bd3e1e6c.html 使用双缓冲时必须有一个内存位图(画布),不是背景Bitmap的话,那只能是单色图了,所以要填充它,否则就黑色。而要使用GDI+配合双缓冲,则会覆盖掉透明的PNG背景。如果是为了不闪烁,可以用GDI+的DrawCachedImage,不采用GDI的双缓冲方式。 硬要使用GDI双缓冲不知道有没有解决方法,但自己是没想出来。你可以使用GDI+的双缓冲试试。g(HDC)建立Bitmap从Bitmap获得memGraphics所有绘制都在memGraphics里,DoDraw(memGraphics)建立CachedBitmap用g绘制这个CachedBitmap 我说的是通过png透明部分要看到的背景 贴图总还是有坐标的吧你要把png贴到背景图片的什么位置把这个区域先贴到缓存里再上png图是不是能解决你现在的问题呢? 刚看了关于GDI+编程的书,来看一看 这样不太好吧,要是换个背景,难道又把其他的背景贴到缓存里面,然后再去贴PNG的图片? 我提一个思路不过我也没试过大家都知道GDI+处理贴图时是可以指定alpha信息的是不是可以考虑通过GDI+的方式实现双缓冲当然这个缓冲区中实现的是一个完全透明的图片然后再在这个图片上贴图也许这个方法能解决你的问题回头我也研究一下有结果的话回合大家分享 楼主可以看看我这篇博客,有讲到 PNG 显示 为透明的 办法。http://blog.csdn.net/ilysony/archive/2010/10/11/5932844.aspx LZ就是不是去尝试?GDI+的双缓冲不会闪的。硬要按常理用GDI双缓冲来解决? gdi+里面貌似没有这个函数吧,DrawCachedImage,只有DrawCachedBitmap 在贴图之前,我先将窗口的背景作为贴图的背景先画一次,然后再将PNG图片画到缓冲里面,最后在需要贴图的时候显示出来,这样使用双缓冲显示PNG图片的时候,PNG的背景就是透明的了,如果大家有更好的办法,请告诉我 询问关于Vector和它的释放问题 listctrl.SetItemCount 从CFormView继承,工程向导不让我选择对话框ID,为何? 虚拟列表求教 一个线程读另外一个写同一个变量是否需要互斥控制 可以从服务器connect和send到终端机,但是客户机收不到数据。 !!!急问:使用COM组件的线程在service中不能获得正确的接口,怎么办? 在线等!怎么让窗口随小在任务栏上 怎么在程序里改变CStatic显示的文字? 请帮忙,如何恢复正常? vc串口通信 我想在activeX控件中显示一个在旋转的三角形,应该如何操作?
用内存贴图的方式就会看见PNG图片的背景,如何将这个背景去掉
改为
pDC->BitBlt(0,0,imgWidth,imgHigh,&m_memDC,0,0,SRCPAINT);
如果是为了不闪烁,可以用GDI+的DrawCachedImage,不采用GDI的双缓冲方式。
你可以使用GDI+的双缓冲试试。
g(HDC)
建立Bitmap
从Bitmap获得memGraphics
所有绘制都在memGraphics里,DoDraw(memGraphics)
建立CachedBitmap
用g绘制这个CachedBitmap
你要把png贴到背景图片的什么位置
把这个区域先贴到缓存里再上png图是不是能解决你现在的问题呢?
不过我也没试过
大家都知道GDI+处理贴图时是可以指定alpha信息的
是不是可以考虑通过GDI+的方式实现双缓冲
当然这个缓冲区中实现的是一个完全透明的图片
然后再在这个图片上贴图
也许这个方法能解决你的问题
回头我也研究一下
有结果的话回合大家分享