#include "highgui.h"
#include "cv.h"
#define line_type CV_AA
int main()
{
IplImage* image2;
CvPoint r1,r2,center,p00,p01,p11,p10,pl,pr,ptt[8],*pt[1],org;
CvSize axes;
CvFont font;
CvScalar color;
pt[0]=&(ptt[0]); pt[1]=&(ptt[4]); int arr[2];arr[0]=3;arr[1]=4;//详细看下一个粉色标记
//画图初始化
IplImage *image=cvCreateImage(cvSize(600,600),IPL_DEPTH_8U,3);
cvNamedWindow("image",0/*CV_WINDOW_AUTOSIZE*/);
//background
r1.x=0;
r1.y=0;
r2.x=600;r2.y=600;
cvRectangle(image,r1,r2,CV_RGB(255,255,255),CV_FILLED,line_type,0);
//body
center.x=300;center.y=400;
axes.width=150; axes.height=270;
double angle=0;
double start=0;
double end=180;
color=CV_RGB(0,0,0);
cvEllipse(image,center,axes,angle,start,end,color,CV_FILLED,line_type,0);
axes.height=60; axes.width=130;
angle=180;
cvEllipse(image,center,axes,angle,start,end,color,40,line_type,0);
color=CV_RGB(255,255,255);
axes.height=110;axes.width=110;angle=0;
cvEllipse(image,center,axes,angle,start,end,color,CV_FILLED,line_type,0);
axes.height=63;axes.width=110;angle=180;
cvEllipse(image,center,axes,angle,start,end,color,CV_FILLED,line_type,0);
start=0;end=360;//feet
pl.x=220; pl.y=450;
pr.x=380; pr.y=450;
axes.width=35; axes.height=55; angle=40;
color=CV_RGB(200,200,0);
cvEllipse(image,pl,axes,angle,start,end,color,CV_FILLED,line_type,0);
angle=-40;
cvEllipse(image,pr,axes,angle,start,end,color,CV_FILLED,line_type,0);
angle=45;//left hand
axes.height=80; axes.width=20;
start=190; end=370;
pl.x=160; pl.y=310;color=CV_RGB(27,27,27);
cvEllipse(image,pl,axes,angle,start,end,color,CV_FILLED,line_type,0);
angle=-45;//right hand
start=170; end=350;
pl.x=440;
cvEllipse(image,pl,axes,angle,start,end,color,CV_FILLED,line_type,0);
angle=-10;//left eye
axes.height=25; axes.width=17;
start=0; end=360;
pl.x=244; pl.y=225;
color=CV_RGB(255,255,255);
cvEllipse(image,pl,axes,angle,start,end,color,1,line_type,0);
pl.x=248; pl.y=220;
cvCircle(image,pl,8,color,CV_FILLED,line_type,0);
pl.x=238; pl.y=235;
cvCircle(image,pl,3,color,CV_FILLED,line_type,0);
angle=10;//right eye
pr.x=356; pr.y=225;
cvEllipse(image,pr,axes,angle,start,end,color,1,line_type,0);
pr.x=352; pr.y=220;
cvCircle(image,pr,8,color,CV_FILLED,line_type,0);
pr.x=362; pr.y=235;
cvCircle(image,pr,3,color,CV_FILLED,line_type,0);
//mouth,在这里用到一个三角形做企鹅的“黄色”的嘴
pt[0][2].x=300; pt[0][2].y=263;
pt[0][1].x=272; pt[0][1].y=247;
pt[0][0].x=327; pt[0][0].y=247;
color=CV_RGB(200,200,0);
cvFillPoly(image,pt,arr,1,color,line_type,0);
//红色的围巾
center.x=300;center.y=230;
axes.height=70; axes.width=140;
start=210;end=330;angle=0;
color=CV_RGB(255,0,0);
cvEllipse(image,center,axes,angle,start,end,color,30,line_type,0);
pt[1][0].x=240; pt[1][0].y=300;//【问1】这里用一个四边形做围巾,如果不把pt[0][]
pt[1][1].x=233; pt[1][1].y=375;//全部标记为0,则会出错
pt[1][2].x=275; pt[1][2].y=390;//如果保持pt[1][],则企鹅的嘴会变成“红色”
pt[1][3].x=270; pt[1][3].y=310;//如果变成pt[0][],则围巾变成三角形,因为arr[0]=3
pt[0][2].x=0; pt[0][2].y=0;//但若将arr[0]=4,则又会出错。。。
pt[0][1].x=0; pt[0][1].y=0;
pt[0][0].x=0; pt[0][0].y=0;
cvFillPoly(image,pt,arr,2,color,line_type,0);
//所以现在就按这样的程序运行,在结束时会有中断,说是pt被中断
//文字,【问2】 我想用和例3-4一样,采用cvSubS做差,这样文字的显示就是变化的,
//但是如果把注释部分打开,则不会出现企鹅,等待几秒钟,
//直接出现“lovepenguin”的字样
cvInitFont(&font,CV_FONT_HERSHEY_COMPLEX,1.5,2.0,0.5,4,line_type);
org.x=260; org.y=80;
//image2=cvCloneImage(image);
//for(int i=0;i<256;i++)
//{
// cvSubS(image2,cvScalarAll(i),image,0);
cvPutText(image,"LovePenguin",org,&font,CV_RGB(255,128,250));
cvShowImage("lovepenguin",image);
// cvWaitKey(1);
//}
/*//6*6的坐标轴,帮助确定点坐标,在编程(绘图)的过程中应用
pl.x=0; pl.y=100; pr.x=600; pr.y=100;
cvLine(image,pl,pr,color,1,line_type,0);
pl.x=0; pl.y=200; pr.x=600; pr.y=200;
cvLine(image,pl,pr,color,1,line_type,0);
pl.x=0; pl.y=300; pr.x=600; pr.y=300;
cvLine(image,pl,pr,color,1,line_type,0);
pl.x=0; pl.y=400; pr.x=600; pr.y=400;
cvLine(image,pl,pr,color,1,line_type,0);
pl.x=0; pl.y=500; pr.x=600; pr.y=500;
cvLine(image,pl,pr,color,1,line_type,0);
pl.x=100; pl.y=0; pr.x=100; pr.y=600;
cvLine(image,pl,pr,color,1,line_type,0);
pl.x=200; pl.y=0; pr.x=200; pr.y=600;
cvLine(image,pl,pr,color,1,line_type,0);
pl.x=300; pl.y=0; pr.x=300; pr.y=600;
cvLine(image,pl,pr,color,1,line_type,0);
pl.x=400; pl.y=0; pr.x=400; pr.y=600;
cvLine(image,pl,pr,color,1,line_type,0);
pl.x=500; pl.y=0; pr.x=500; pr.y=600;
cvLine(image,pl,pr,color,1,line_type,0);
*/
cvShowImage("image",image);
cvWaitKey(0);
cvSaveImage("mysmile.jpg",image);
cvReleaseImage(&image);
cvDestroyWindow("lovpenguin");
}