一个给图片添加字幕的函数

/*********************************************************
函数说明:给图片添加居中的文字
参数:
1:strFileName    :欲加载的图片的路径
2:strTile        :被添加了字符串(以“/n”换行)
返回值            :添加后的图片的HBITMAP
*********************************************************/

 

HBITMAP AddString(LPCTSTR strFileName, LPCTSTR strTitle)
{
    HBITMAP hbmp = (HBITMAP)::LoadImage(NULL,strFileName,IMAGE_BITMAP,0,0,LR_LOADFROMFILE|LR_CREATEDIBSECTION);
    if (!hbmp)
    {
        ::MessageBox(NULL,_T("Faild to load the file!"),_T("Error"),MB_OK);
        return NULL;
    }
    BITMAP bmp;
    GetObject(hbmp,sizeof(BITMAP),(LPVOID)&bmp);

    CDC cdc;
    cdc.CreateCompatibleDC(NULL);
    SelectObject(cdc.GetSafeHdc(),hbmp);
    HBITMAP hBitmap = CreateCompatibleBitmap(cdc.m_hDC,bmp.bmWidth,bmp.bmHeight);
    ASSERT(hBitmap != NULL);
   
    CFont font;
    font.CreatePointFont(150,_T("黑体"));
    SelectObject(cdc.m_hDC,font.m_hObject);
    cdc.SetBkMode(TRANSPARENT);
    SetTextColor(cdc.m_hDC,RGB(255,255,255));

    CString str;
    str.Format(_T("%s"),strTitle);
    if (_T('/n') != str.Right(1))//在这里为字符串尾部添加一个“/n”为了便于后面计算输出
    {
        str+=_T("/n");
    }

    CString strline;//每一行输出的字符串
    int nyFirst = 30;//第一行输出的纵坐标为20
    while (str.GetLength()>1)
    {
        str.TrimLeft();
        int nlen = str.Find(_T('/n'));
        strline = str.Left(nlen);
        str = str.Right(str.GetLength()-nlen);
        CSize size = cdc.GetTextExtent(strline);
        int nx = (float)bmp.bmWidth*0.5 -(float)size.cx*0.5;
        TextOut(cdc.m_hDC,nx,nyFirst,strline,strline.GetLength());
        nyFirst+=20;//行间距为20 Pix

    }
   
    return (HBITMAP)(*cdc.GetCurrentBitmap());
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值