温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

518抽奖软件源码之:ImageStone显示处理透明PNG图片

发布时间:2020-07-20 18:34:02 来源:网络 阅读:525 作者:wsg1212 栏目:编程语言

518抽奖软件源码之:ImageStone显示处理透明PNG图片

在开发“518抽奖软件”的时候,图片抽奖模式的时候,会遇到PNG透明图片。 需要对PNG透明图片进行显示、放大缩小、保存等处理。如何在缩小并保存后还保持透明,如何显示透明图片,请参看下面源码。

显示透明PNG图片

	if (((FCObjImage*)img)->Load(file, NULL))	{	if (bAlpha)	((FCObjImage*)img)->ApplyEffect(FCEffectPremultipleAlpha()); //显示透明PNG需要加这行代码	}	void Timg::draw (HDC hDc, RECT rc)	{	if (m_w <= 0 || m_h <= 0) return;	if (rc.left >= rc.right || rc.top >= rc.bottom) return;	if (m_w == rc.right - rc.left && m_h == rc.bottom - rc.top)	((FCObjImage*)img)->Draw(hDc, rc.left, rc.top);	else	((FCObjImage*)img)->Draw(hDc, rc);	} 

缩小透明PNG图片并保存

 //最关键的是如果要缩小并保存图片,图片加载的时候,不要执行 ApplyEffect(FCEffectPremultipleAlpha()) !! //下面是一般的缩放保存代码 void Timg::stretch (int w, int h) {	if (m_w <= 0 || m_h <= 0) return;	((FCObjImage*)img)->Stretch_Smooth(w, h);	m_w = w;	m_h = h; } BOOL Timg::save (const WCHAR* file, int quality) {	return ((FCObjImage*)img)->Save(file, quality); } 

检查图片是否是透明的

 BOOL Timg::isTransparent() {	if (!isLoad()) return FALSE;	if (((FCObjImage*)img)->ColorBits() != 32) return FALSE;	int w = ((FCObjImage*)img)->Width();	int h = ((FCObjImage*)img)->Height();	int step_y = h * 0.05;	if (step_y < 1)	step_y = 1;	int step_x = w * 0.05;	if (step_x < 1)	step_x = 1;	for (int y = 0; y < h; y += step_y)	{	BYTE* pCurr = ((FCObjImage*)img)->GetBits(y);	for (int x = 0; x < w; x += step_x)	{	if (255 != ((RGBQUAD*)pCurr)->rgbReserved)	return TRUE;	pCurr += (step_x * 4);	}	}	return FALSE; } 
向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI