1.图像分割
用cvCopy语句实现
private: void CutImage(String^ strFilename)
{
String^ strPureFilename="";
strPureFilename=strFilename->Substring(strFilename->LastIndexOf("//")+1);
String^ strCurFolder="";
IplImage* src;
IplImage* dst;
char* strtmpfile = (char*)(void*)Marshal::StringToHGlobalAnsi(strFilename);
if((src=cvLoadImage(strtmpfile, CV_LOAD_IMAGE_UNCHANGED))!= 0)
{
String^ strSavePath="";
String^ strObjFilename="";
for(int k=0;k<lstFolder->Items->Count;k++)
{
for(int j=0;j<2;j++)
{
CvRect roi=cvRect(j*(src->width/2),0 ,src->width/2,src->height );
// 设置ROI
cvSetImageROI(src,roi);
// 创建子图像
dst = cvCreateImage( cvSize(roi.width, roi.height), src->depth, src->nChannels );
cvCopy(src,dst);
cvResetImageROI(src);
strSavePath=lstFolder->Items[k]->ToString();
strCurFolder=txtPath->Text->Substring(txtPath->Text->LastIndexOf("//")+1);
if(j==0)
{
strObjFilename=strSavePath+"//"+strPureFilename->Substring(strPureFilename->IndexOf(",")-2,2) +strPureFilename;
}
if(j==1)
{
strObjFilename=strSavePath+"//"+strPureFilename->Substring(strPureFilename->IndexOf(",")+1,2) +strPureFilename;
}
char* strtemppath = (char*)(void*)Marshal::StringToHGlobalAnsi(strObjFilename);
cvSaveImage(strtemppath,dst);
cvReleaseImage(&dst);
}
}
cvReleaseImage(&src);
}
}
原图像
分割后图像左半部 分割后图像右半部
2.图像缩放
用cvResize实现
private: void ZoomImage(String^ strFilename,int maxWidth)
{
String^ strPureFilename="";
strPureFilename=strFilename->Substring(strFilename->LastIndexOf("//")+1);
String^ strCurFolder="";
String^ strSavePath="";
String^ strObjFilename="";
IplImage* src;
IplImage* dst;
char* strtmpfile = (char*)(void*)Marshal::StringToHGlobalAnsi(strFilename);
if((src=cvLoadImage(strtmpfile, CV_LOAD_IMAGE_UNCHANGED))!= 0)
{
int srcWidth=src->width;
int srcHeight=src->height;
//int maxWidth=377;
int maxHeight=0;
double factor=1;
factor= (double) maxWidth/srcWidth;
maxHeight=(int)(srcHeight*factor);
CvSize dst_size;
dst_size.width=maxWidth;
dst_size.height =maxHeight;
dst=cvCreateImage(dst_size,src->depth,src->nChannels);
//cvResize(src,dst,CV_INTER_LINEAR);
cvResize(src,dst,CV_INTER_AREA);
strSavePath=strFilename->Substring(0,strFilename->LastIndexOf("//"));
strCurFolder=txtPath->Text->Substring(txtPath->Text->LastIndexOf("//")+1);
String^ strSeq=TrimZero(strPureFilename->Substring(0,2));
//strObjFilename=strSavePath+"//"+strCurFolder->Substring(0,4)+"_" +strPureFilename->Substring(0,2) +strPureFilename->Substring(strPureFilename->LastIndexOf("."));
strObjFilename=strSavePath+"//"+strCurFolder->Substring(0,4)+"_" +strSeq +strPureFilename->Substring(strPureFilename->LastIndexOf("."));
if(maxWidth==BIGIMGWIDTH)
{
//strObjFilename=strSavePath+"//"+strCurFolder->Substring(0,4)+"_big_" +strPureFilename->Substring(0,2) +strPureFilename->Substring(strPureFilename->LastIndexOf("."));
strObjFilename=strSavePath+"//"+strCurFolder->Substring(0,4)+"_big_" +strSeq +strPureFilename->Substring(strPureFilename->LastIndexOf("."));
}
char* strtemppath = (char*)(void*)Marshal::StringToHGlobalAnsi(strObjFilename);
cvSaveImage(strtemppath,dst);
cvReleaseImage(&dst);
cvReleaseImage(&src);
if(maxWidth==BIGIMGWIDTH)
{
//加底纹
String^ strBackGroundPath=this->txtPath->Text->Substring(0,this->txtPath->Text->LastIndexOf("//"));
String^ strBackGroundFilename="底纹.png";
//AddImage(strObjFilename);
AddImage(strObjFilename,strBackGroundPath+"//"+strBackGroundFilename);
//ZoomBackGroundImage(strObjFilename);
}
}
}
缩放后的图片
3.图片叠加
图片加底纹,调用其它应用程序实现,用c#编写
private: System::Void AddImage(String^ strFilename,String^ strBackgroundFilename)
{
String^ strCurPath = System::Environment::CurrentDirectory;
String^ strExeFile="ImageAddBackground.exe";
String^ strArgs="/""+strFilename+"/""+" " +"/""+strBackgroundFilename+"/"";
Process::Start(strCurPath+"//"+strExeFile,strArgs);
}
底纹图
加底纹后的图片
4.生成JPG透明叠加图片原理
A. 先由JPG和PNG文件叠加成PNG文件
B. 把PNG文件显示再PictureBox控件内
C. 把PictureBox控件的图片重绘生成BMP图片
D. 把BMP图片显示再PictureBox控件内
E. 把PictureBox控件内的图片另存为JPG文件
string imgPath=generateWinterMark(CurrentDirectory, body_path, FaImage);
pictureBox1.Load(imgPath);
Bitmap bmp = new Bitmap(pictureBox1.Width, pictureBox1.Height);
pictureBox1.DrawToBitmap(bmp, pictureBox1.ClientRectangle);
bmp.Save(CurrentDirectory + "//1.bmp");
pictureBox1.Load(); //释放文件进程
pictureBox1.Load(CurrentDirectory + "//1.bmp");
pictureBox1.Image.Save(gParameter.strForeFilename, ImageFormat.Jpeg);
pictureBox1.Load(); //释放文件进程