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;}
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。