您好,登錄后才能下訂單哦!
在開發(fā)“518抽獎(jiǎng)軟件”的時(shí)候,圖片抽獎(jiǎng)模式的時(shí)候,會(huì)遇到PNG透明圖片。 需要對PNG透明圖片進(jìn)行顯示、放大縮小、保存等處理。如何在縮小并保存后還保持透明,如何顯示透明圖片,請參看下面源碼。
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);
}
//最關(guān)鍵的是如果要縮小并保存圖片,圖片加載的時(shí)候,不要執(zhí)行 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;
}
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。