标题:518抽奖软件源码之:ImageStone显示处理透明PNG图片
取消只看楼主
wsg1212
Rank: 1
来 自:518抽奖软件
等 级:新手上路
帖 子:14
专家分:0
注 册:2015-5-6
 问题点数:0 回复次数:0 
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;
}
搜索更多相关主题的帖子: 透明 PNG 图片 img int 
2017-10-24 15:23



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-481714-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.308285 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved