vc++加载透明png图片方法

vc++加载透明png图片方法

ID:17900019

大小:70.63 KB

页数:15页

时间:2018-09-09

vc++加载透明png图片方法_第1页
vc++加载透明png图片方法_第2页
vc++加载透明png图片方法_第3页
vc++加载透明png图片方法_第4页
vc++加载透明png图片方法_第5页
资源描述:

《vc++加载透明png图片方法》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、使用CImage画PNG,原本透明的图片,结果却显示白色/黑色底。解决办法:像素转换。#includevoidCrossImage(CImage&img)//对像素进行转换{if (Image.GetBPP() == 32){for(inti=0;i

2、5;}}}}//绘制pngCImageimg;img.Load("res/smiling.png");CrossImage(img);img.AlphaBlend(dc,15,30);vc++加载透明png图片方法——GDI+和CImage两种在加载png时遇到了麻烦,后来用了两个方法解决了。一个是用GDI+,另外就是用vs.netMFC自带的CImage。先看看GDI+的方法方法1:1.GDI+画透明图层(alpha)的png图片stdafx加入如下:#include //初始化一下com口#include "GdiPlus.h"using namespace G

3、diplus;#pragma comment(lib,"gdiplus.lib")开始初始化:在app类的声明里(.h)加入:ULONG_PTR m_gdiplusToken;InitInstance()里加入://若没有usingnamespace Gdiplus;就要在前面加Gdiplus::GdiplusStartupInput gdiplusStartupInput;GdiplusStartup(&m_gdiplusToken, &gdiplusStartupInput, NULL);重载ExitInstance,加入GdiplusShutdown(m_gdiplusToken

4、);int CxxxApp::ExitInstance(){// TODO: 在此添加专用代码和/或调用基类GdiplusShutdown(m_gdiplusToken);return CWinApp::ExitInstance();}显示图片的过程如下CClientDC *pDC = new CClientDC(GetDlgItem(IDC_STATIC_PIC));CRect rect;GetDlgItem(IDC_STATIC_PIC)->GetWindowRect(&rect);Graphics graphics(pDC->m_hDC); // Create a GDI+ gr

5、aphics objectImage image(_T("1.png")); // Construct an imagegraphics.DrawImage(&image, 0, 0, image.GetWidth(), image.GetHeight());delete pDC;这是用GDI+来显示图片。2.CImage绘制带alpha透明图层的png图片用MFC自带的CImage也可以显示,不过要稍微进行转换才能得到正常的带α通道的png图片!在画图前进行一次转换,其中Image是CImage的对象if (Image.GetBPP() == 32) //确认该图像包含Alpha通道

6、{int i;int j;for (i = 0; i < Image.GetWidth(); i++){for (j = 0; j < Image.GetHeight(); j++){byte *pByte = (byte *)Image.GetPixelAddress(i, j);pByte[0] = pByte[0] * pByte[3] / 255;pByte[1] = pByte[1] * pByte[3] / 255;pByte[2] = pByte[2] * pByte[3] / 255;}}}具体方法如下:HWND hwnd = GetSafeHwnd(); //获取窗口

7、的HWND::InvalidateRect( hwnd, NULL, true ); //或者 ::InvalidateRect( hwnd, NULL, false );::UpdateWindow(hwnd);//若使用前不想把原来绘制的图片去掉,可以删去上面那三段CDC *pDC = GetDC();CImage Image;Image.Load(strPath);if (Image.IsNull()){MessageBox(_T("没加

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。