CxImage透明图片合成和文字叠加

1         CxImage的作用

CxImage将几张图片合成一张图片,在一张底图上添加图片,有些图片是有透明效果的,实现图片之间的透明重叠效果。另外还可以添加文字。

(1)背景图片mymix.png

(2)角标图片,左下角为透明的,black.png和snap.png

(3)字图片1MixImage1.jpgMixImage2.jpg

(4)合成后图片效果图

现在的目标就是将(2),(3)中的有透明的图片和不透明的图片合成到背景图片(1)上,实现图片(4)中的效果。

1         CxImage合成实例

CxImage imageMix;//合成后的图片

CxImage imagesy1;//子图片1

CxImage imagesy2;//字图片2

CxImage imagesysnapfalg1;//透明图片1

CxImage imagesyblackflag2;//透明图片2

CxImage::CXTEXTINFO  BlackName, BlackSex, UserCardId, CompareSimilarity, SnapPicTime, CaseDescrip;//图片叠加文字

imagesy1.load("MixImage1.jpg", CXIMAGE_FORMAT_JPG);//加载子图片1

imagesy2. Load ("MixImage2.jpg", CXIMAGE_FORMAT_JPG);//加载字图片2

imagesy1.Resample(340, 340, 0, &imagesy1);//设置子图片大小

imagesy2.Resample(340, 340, 0, &imagesy2);    

//加载背景图片                  

if (imageMix.Load(_T("mymix.png"), CXIMAGE_FORMAT_JPG))

{     //将两张子图片合成到背景图片上

       imageMix.MixFrom(imagesy2, 35, 398);//图片相对左下角,文字相对左上角

imageMix.MixFrom(imagesy1, 35, 28);//加入第一张子图片

//将带有一半透明的图片合成到背景上

imagesysnapfalg1.Load(_T("snap.png"),CXIMAGE_FORMAT_JPG);

       imagesysnapfalg1.Resample(78,78,0,&imagesysnapfalg1);

       imagesysnapfalg1.SetTransIndex(255);//设置图片的透明度0不透明,255完全透明

       imageMix.MixFrom(imagesysnapfalg1,297,398+261);

//将带有一半透明的图片合成到背景上

       imagesyblackflag2.Load(_T("black.png"),CXIMAGE_FORMAT_JPG);

       imagesyblackflag2.Resample(78,78,0,&imagesyblackflag2);

       imagesyblackflag2.SetTransIndex(255);

       imageMix.MixFrom(imagesyblackflag2,297,290);

       //初始化叠加文字结构体

imageMix.InitTextInfo(&BlackName);

       imageMix.InitTextInfo(&BlackSex);

       imageMix.InitTextInfo(&UserCardId);

       imageMix.InitTextInfo(&CompareSimilarity);

       imageMix.InitTextInfo(&SnapPicTime);

       imageMix.InitTextInfo(&CaseDescrip);

//设置文字的属性

_stprintf(BlackName.lfont.lfFaceName, _T("微软雅黑"));//字体

BlackName.lfont.lfCharSet = GB2312_CHARSET;//字符集

BlackName.lfont.lfHeight = 40;//高度

BlackName.fcolor = RGB(255, 255, 255);//颜色

BlackName.opaque = 0;

_stprintf(BlackSex.lfont.lfFaceName, _T("微软雅黑"));

BlackSex.lfont.lfCharSet = GB2312_CHARSET;

BlackSex.lfont.lfHeight = 40;

BlackSex.fcolor = RGB(255, 255, 255);

BlackSex.opaque = 0;

 

_stprintf(UserCardId.lfont.lfFaceName, _T("微软雅黑"));

UserCardId.lfont.lfCharSet = GB2312_CHARSET;

UserCardId.lfont.lfHeight = 40;

UserCardId.fcolor = RGB(255, 255, 255);

UserCardId.opaque = 0;

 

_stprintf(CompareSimilarity.lfont.lfFaceName, _T("微软雅黑"));

CompareSimilarity.lfont.lfCharSet = GB2312_CHARSET;

CompareSimilarity.lfont.lfHeight = 40;

CompareSimilarity.fcolor = RGB(255, 255, 255);

CompareSimilarity.opaque = 0;

 

_stprintf(SnapPicTime.lfont.lfFaceName, _T("微软雅黑"));

SnapPicTime.lfont.lfCharSet = GB2312_CHARSET;

SnapPicTime.lfont.lfHeight = 40;

SnapPicTime.fcolor = RGB(255, 255, 255);

SnapPicTime.opaque = 0;

 

_stprintf(CaseDescrip.lfont.lfFaceName, _T("微软雅黑"));

CaseDescrip.lfont.lfCharSet = GB2312_CHARSET;

CaseDescrip.lfont.lfHeight = 40;

CaseDescrip.fcolor = RGB(255, 255, 255);

CaseDescrip.opaque = 0; //背景

//从结构体中输入文字的值

float similarity = sFasData.fSimilarity * 100;

sprintf_s(UserCardId.text, "%s", sFasData.strBlackCerNo.c_str());

sprintf_s(SnapPicTime.text, "%s", sFasData.strSnapTime.c_str());

sprintf_s(CompareSimilarity.text, "%0.*f", 2, similarity);

sprintf_s(BlackName.text,"%s",sFasData.strBlackName.c_str());

 

std::string strCaseDescrip = "未知";

//开始将文字叠加到图片

imageMix.DrawStringEx(0, 710, 138, &SnapPicTime);

imageMix.DrawStringEx(0, 679, 198, &CompareSimilarity);

imageMix.DrawStringEx(0, 519, 518, &BlackName);

imageMix.DrawStringEx(0, 509, 574, &BlackSex);

imageMix.DrawStringEx(0, 690, 638, &UserCardId);

}

猜你喜欢

转载自www.cnblogs.com/bclshuai/p/9936935.html