GDI+双缓冲绘制png透明问题

问题描述

GDI+双缓冲绘制png透明问题
我用了gdi+的graphics来绘制png

HDC hdc = GetDC(hWnd);//获取窗口的绘图hdcHDC hMdc=CreateCompatibleDC(hdc);//创建内存dcHBITMAP hMbitmap=CreateCompatibleBitmap(hdcwnd_widthwnd_height);//创建内存绘图图片SelectObject(hMdchMbitmap);//关联dc和图片Graphics graphics(hMdc);//创建graphics绘图对象FillRect(hMdc&clientRectwhitBru);//内存图片填充白色graphics.DrawImage(png.pImage png.point.xpng.point.ypwph);//在该位置绘制图片BitBlt(hdc00wnd_widthwnd_heighthMdc00SRCCOPY)

我定义了一个结构体,在point的位置绘制宽为pw,高为ph的png图片,可是png图片有的部分是半透明,背景是白色的,这样把内存里的图片拷到窗口的时候本该半透明的部分会有白色的背景,该怎样解决这个问题?求大神支招!我想要的是这中效果

现在是这种效果

我就是想要把白色的背景也能是按alpha值透明,那些心都是会动的,程序是全屏,并且是topmost的,求解决办法!

时间: 2024-11-05 12:24:40

GDI+双缓冲绘制png透明问题的相关文章

VC6下的GDI+双缓冲

一.概述 这段时间在研究GDI+双缓冲的实现方法,在网上花了很多时间都没有找到合适的示例,特别是针对VC6的.后来通过对网上资料的分析,和对SDK/MFC的学习,实现了VC6下的GDI+双缓冲,把它写出来与大家分享,希望可以找到更好的实现方法. GDI+的一个优点就是可以直接使用jpg图像,在这个示例中,我没有把图像文件放在资源中,而是动态读取,一是由于项目需求,图像数目是未知的:二是由于动态读文件效率低下,使用双缓冲更能体现出优势. 二.分析 在实现过程中,犯了一个错误,把读图像的方法放在了O

VC GDI双缓冲机制绘图防屏幕闪烁实现步骤

在OnDraw(CDC* pDC) 中添加如下代码      CDC MemDC; //首先定义一个显示设备对象 CBitmap MemBitmap;//定义一个位图对象 //随后建立与屏幕显示兼容的内存显示设备 MemDC.CreateCompatibleDC(NULL); //这时还不能绘图,因为没有地方画 ^_^ //下面建立一个与屏幕显示兼容的位图,至于位图的大小嘛,可以用窗口的大小,也可以自己定义(如:有滚动条时就要大于当前窗口的大小,在BitBlt时决定拷贝内存的哪部分到屏幕上) M

GDI绘图 双缓冲贴图 电脑死机

问题描述 GDI绘图 双缓冲贴图 电脑死机 绘图的时候使用了双缓冲贴图 然后自己定义了一个透明贴图的函数DrawTransBitmap,贴图成功了,但是程序一运行内存就飞速增长.不关的话马上就死机了,小白一枚 求各位大神帮忙 万分感激 解决方案 case WM_PAINT: hdc = GetDC(hwnd); mdc = CreateCompatibleDC(hdc); bufdc = CreateCompatibleDC(hdc); bufdc2 = CreateCompatibleDC(h

c++- 我用VS2010的GDI+写了双缓冲为什么还是画面抖动?

问题描述 我用VS2010的GDI+写了双缓冲为什么还是画面抖动? public: Graphics *gg; Graphics g=dc.GetSafeHdc(); gg->DrawImage(bk,0,0); gg->DrawImage(zj,x,y,0+frame*100,0,100,120,UnitPixel); g.DrawImage(&bb,0,0); 解决方案 Graphics g=dc.GetSafeHdc();此处的dc是兼容dc吗?若不是,建议使用兼容dc. 解决方

使用双缓冲技术绘制曲线图

当数据量很大时,绘图可能需要几秒钟甚至更长的时间,而且有时还会出现闪烁现象,为了解决这些问题,可采用双缓冲技术来绘制曲线图. 双缓冲即在内存中创建一个与屏幕绘图区域一致的对象,先将图形绘制到内存中的这个对象上,再一次性将这个对象上的图形拷贝到屏幕上,这样能大大加快绘图的速度.双缓冲实现过程如下: 1.在内存中创建与画布一致的缓冲区 BufferBmp=new Graphics::TBitmap(); BufferBmp->Canvas->Handle=CreateCompatibleDC(Ca

MFC小游戏,使用双缓冲技术但是有些位图无法释放,导致GDI泄露

问题描述 MFC小游戏,使用双缓冲技术但是有些位图无法释放,导致GDI泄露 用MFC写了一个类似于魔塔的小游戏,但是发现会产生GDI泄露,运行一段时间就会崩掉,但是有些位图文件不能通过deleteObject释放,自己搞不太明白,请教一下各位. 解决方案 hero等对象应该是成员变量吧.从代码来看,hero中的picture载入的图片是固定的,那么完全没有必要在OnPaint函数中进行重复调用,完全是浪费,应该将这些代码放到hero对象初始化的地方,一次性完成就可以了. 另外,cDC指针最好也R

双缓冲绘图和窗口控件的绘制——ATL ActiveX 窗口控件生成向导绘制代码OnDraw的一个错误 .

双缓冲绘图和窗口控件的绘制 ---ATL ActiveX 窗口控件生成向导绘制代码OnDraw的一个错误   cheungmine 我们通常使用ATL COM组件,生成一个带窗口的ActiveX控件,然后希望在这个窗口中绘制我们的图像.图形等数据,然而ATL向导生成的代码中包含很多错误,下面是其自动向导生成的代码:     HRESULT OnDraw(ATL_DRAWINFO& di)    {        RECT& rc = *(RECT*)di.prcBounds;       

gdi+-C++ MFC 双缓冲 输出19条横线19条竖线,但是窗体里什么都没有输出

问题描述 C++ MFC 双缓冲 输出19条横线19条竖线,但是窗体里什么都没有输出 C++ MFC 双缓冲 输出19条横线19条竖线,写在ondraw函数里,没有报错,但是窗体里什么都没有输出-- 代码如下: CDC dcMemory: dcMemory.CreateCompatibleDC(pDC); CBitmap GoBoardMap; CRect rect; GetClientRect(&rect); GoBoardMap.CreateCompatibleBitmap(pDC, rec

C#绘图双缓冲技术总结

GDI+的双缓冲问题终于搞定了, 真是松了一口气!一直以来的误区:.net1.1 和 .net 2.0 在处理控件双缓冲上是有区别的..net 1.1 中,使用:this.SetStyle(ControlStyles.DoubleBuffer, true); .net 2.0中,使用:this.SetStyle(ControlStyles.OptimizedDoubleBuffer, true);怪不说老是提示参数无效,一直也不知道是这个问题,呵呵 要知道,图元无闪烁的实现和图元的绘制方法没有多