发一个自己封装的PNG透明图片类。

//-----------pnglib.h
#include "stdafx.h"
#include "afxdialogex.h"
#include "atlimage.h"

class DrawImage
{
public:
	DrawImage(UINT, LPCTSTR);
	DrawImage(HWND, UINT, LPCTSTR);
	~DrawImage();
public:
	void Draw(int, int, int, int);
	void Destroy();
	BOOL LoadPNG(UINT, LPCTSTR);
	BOOL LoadPNG(HWND, UINT, LPCTSTR);
	int GetWidth();
	int GetHeight();
private:
	BOOL Load_Resource(CImage *, UINT, LPCTSTR);
	CImage img;
	HDC hDC;
	HWND hWnd;
};
//----------------pnglib.cpp
#include "stdafx.h"
#include "pnglib.h"

DrawImage::DrawImage(UINT nResID, LPCTSTR lpTyp)
{
	LoadPNG(nResID, lpTyp);
}

DrawImage::DrawImage(HWND hWndin, UINT nResID, LPCTSTR lpTyp)
{
	LoadPNG(hWndin, nResID, lpTyp);
}

DrawImage::~DrawImage()
{
	Destroy();
}

int DrawImage::GetWidth()
{
	return img.GetWidth();
}

int DrawImage::GetHeight()
{
	return img.GetHeight();
}

void DrawImage::Draw(int xDest, int yDest, int WidthDest, int HeightDest)
{
	img.Draw(hDC, xDest, yDest, WidthDest, HeightDest);
}

void DrawImage::Destroy()
{
	img.Destroy();
	ReleaseDC(hWnd, hDC);
}

BOOL DrawImage::LoadPNG(UINT nResID, LPCTSTR lpTyp)
{
	hDC = ::GetDC(hWnd);
	return Load_Resource(&img, nResID, lpTyp);
}

BOOL DrawImage::LoadPNG(HWND hWndin, UINT nResID, LPCTSTR lpTyp)
{
	hWnd = hWndin;
	hDC = ::GetDC(hWnd);
	return Load_Resource(&img, nResID, lpTyp);
}

BOOL DrawImage::Load_Resource(CImage *pImage, UINT nResID, LPCTSTR lpTyp)
{
	if (pImage == NULL)
	{
		return false;
	}
	pImage->Destroy();
	HRSRC hRsrc = ::FindResource(AfxGetResourceHandle(), MAKEINTRESOURCE(nResID), lpTyp);
	if (hRsrc == NULL)return false;
	HGLOBAL hImgData = ::LoadResource(AfxGetResourceHandle(), hRsrc);
	if (hImgData == NULL)
	{
		::FreeResource(hImgData);
		return false;
	}
	LPVOID lpVoid = ::LockResource(hImgData);
	LPSTREAM pStream = NULL;
	DWORD dwSize = ::SizeofResource(AfxGetResourceHandle(), hRsrc);
	HGLOBAL hNew = ::GlobalAlloc(GHND, dwSize);
	LPBYTE lpByte = (LPBYTE)::GlobalLock(hNew);
	::memcpy(lpByte, lpVoid, dwSize);
	::GlobalUnlock(hNew);
	HRESULT ht = ::CreateStreamOnHGlobal(hNew, TRUE, &pStream);
	if (ht != S_OK)
	{
		GlobalFree(hNew);
	}
	else
	{
		pImage->Load(pStream);
		GlobalFree(hNew);
	}
	::FreeResource(hImgData);
	for (int i = 0; i < img.GetWidth(); i++)
	{
		for (int j = 0; j < img.GetHeight(); j++)
		{
			unsigned char* puc = reinterpret_cast<unsigned char *>(img.GetPixelAddress(i, j));
			puc[0] = puc[0] * puc[3] / 255;
			puc[1] = puc[1] * puc[3] / 255;
			puc[2] = puc[2] * puc[3] / 255;
		}
	}
	if (img.IsNull())
	{
		return false;
	}
	return true;
}

用法:

把你的PNG添加到工程里面,修改资源ID为   PIC_PNG1
用法1:默认在当前窗口中绘图
DrawImage m_png(PIC_PNG1,"png");
m_png.Draw(100,100,m_png.GetWidth(),m_png.GetHeight());//其中两个100是图片左上角的坐标

用法2:可以在任何窗口中绘图
HWND hWndin = 桌面句柄;//在桌面绘图,需要自己去获取
DrawImage m_png(hWndin,PIC_PNG1,"png");
m_png.Draw(100,100,m_png.GetWidth(),m_png.GetHeight());

作者:天楼桦

时间: 2024-11-04 11:24:11

发一个自己封装的PNG透明图片类。的相关文章

关于Opengl中将24位BMP图片加入?一个alpha通道并实现透明的问题

#include <windows.h>#include <GL/glut.h>#include <GL/glaux.h>#include <stdio.h> #pragma comment( lib, "opengl32.lib" )// 链接时使用OpenGL32.lib#pragma comment( lib, "glu32.lib" )// 链接时使用GLu32.lib  #pragma comment( li

使用DD_belatedPNG让IE6支持PNG透明图片

众所周知IE6不支持透明的PNG图片,而PNG图片在Web设计方面表现力上,具有其它图形格式所达不到的效果,IE6这一致命缺陷极大地限制了Web设计的创意发挥.虽然解决IE6的透明PNG的方法也很多,从使用IE特有的滤镜或是e­xpression,再到javascript+透明 GIF替代.但是这些方法都有一个缺点,就是不支持CSS中backgrond-position与background-repeat属性.而使用DD_belatedPNG.js可完美的解决IE6下PNG图片透明问题,并且支持

加载透明图片

可以被FLASH动态加载的背景透明图片大致就GIF,PNG两种 先说说GIF图片,用普通的加载方法加载GIF图片完后只能看到动态图片的第一帧,由动态图变成静态的了 所幸有达人完美解决了这个问题,并封装好类供我们使用,这就是GIFPlayer.下载地址网上搜一下很多,要找不到也可以找我要 GIFPlayer使用示例 package{ /*  QQ: 334973991  */ import flash.net.URLRequest; import flash.display.Sprite; imp

LruCache缓存处理及异步加载图片类的封装

Android中的缓存处理及异步加载图片类的封装 一.缓存介绍: (一).Android中缓存的必要性: 智能手机的缓存管理应用非常的普遍和需要,是提高用户体验的有效手段之一. 1.没有缓存的弊端: 流量开销:对于客户端——服务器端应用,从远程获取图片算是经常要用的一个功能,而图片资源往往会消耗比较大的流量. 加载速度:如果应用中图片加载速度很慢的话,那么用户体验会非常糟糕. 那么如何处理好图片资源的获取和管理呢?异步下载+本地缓存 2.缓存带来的好处: 1. 服务器的压力大大减小: 2. 客户

9个PNG透明图片免费下载网站推荐

9个PNG透明图片免费下载网站推荐 酷站推荐 2017.08.06 13:47 png格式的图片因为去掉了的背景,方便使用在任何颜色的背景,所以对于从事设计师的朋友来说,经常会用到png透明图片.相信有不少懒人为了多下载几张PNG图都注册了甚至是充值了千库或千图这样的网站吧,不给钱一天只让下一两张图,实在不够用,今天分享给大家几个提供免费下载png图片的网站,本文章会持续更新. StickPNG StickPNG 收录了很多 PNG 图片的免费图库资源,总数超过一万五千张!图片多半是单一主题的物

一个抓取知乎页面图片的简单爬虫

在知乎上看到一个问题  能利用爬虫技术做到哪些很酷很有趣很有用的事情?发现蛮好玩的,便去学了下正则表达式,以前听说正则表达式蛮有用处的,学完后觉得确实很实用的工具.问题评论下基本都是python写的爬虫,我看了下原理,感觉爬一个简单的静态网页还是挺容易的.就是获取网站html源码,然后解析需要的字段,最后拿到字段处理(下载).想起我学java的时候有个URL类好像有这个功能,便去翻了下api文档,发现URLConnection果然可以获取html源码. 首先从核心开始写,获取网页源码 packa

网页上PNG透明图片的运用(ie6+滤镜)

PNG ( Portable Network Graphics ) 格式的无损压缩和半透明特性对增强网页效果减少网页体积有着重要的作用,但由于 IE6 不支持 PNG,所以一直未能得到广泛的应用. 虽然 IE7 已经支持 PNG,但目前 IE6 还是主流,怎么样让 IE6 也使用 PNG 呢?网上有相关的介绍,下面我也尝试做一下介绍,希望在表达上能更加通俗易懂… IE5.5+ 的 AlphaImageLoader 滤镜为 PNG 提供良好的支持,虽然 IE5.0 无法支持,但毕竟是非常非常小的一

一个完整的微信上传图片下载图片实例,把手把教学

步骤一:绑定域名 先登录微信公众平台进入“公众号设置”的“功能设置”里填写“JS接口安全域名”. 备注:登录后可在“开发者中心”查看对应的接口权限. 步骤二:引入JS文件 在需要调用JS接口的页面引入如下JS文件,(支持https):http://res.wx.qq.com/open/js/jweixin-1.0.0.js 请注意,如果你的页面启用了https,务必引入 https://res.wx.qq.com/open/js/jweixin-1.0.0.js ,否则将无法在iOS9.0以上系

[WebApi] 捣鼓一个资源管理器--服务器端分割压缩图片

<打造一个网站或者其他网络应用的文件管理接口(WebApi)第五章"服务器端分割压缩图片"> ======================================================== 作者:qiujuer 博客:blog.csdn.net/qiujuer 网站:www.qiujuer.net 开源库:Genius-Android 转载请注明出处:http://blog.csdn.net/qiujuer/article/details/41826865