javayestome 发表于 2013-1-26 13:45:33

图像模拟类第一次实现 c++沉思录 第九章

<div class="highlighter">
[*]/*
[*]*=====================================================================================
[*]*
[*]*Filename:Picture1.cpp
[*]*
[*]*Description:图像处理,第一次实现
[*]*
[*]*Version:1.0
[*]*Created:2009年01月08日12时56分35秒
[*]*Revision:none
[*]*Compiler:gcc
[*]*
[*]*Author:LiWeiJian(mn),lwj1396@163.com
[*]*Company:hunanuniversity
[*]*
[*]*=====================================================================================
[*]*/
[*]
[*]#include<iostream>
[*]
[*]usingnamespacestd;
[*]
[*]classPicture
[*]{
[*]friendostream&operator<<(ostream&,constPicture&);
[*]friendPictureframe(constPicture&);
[*]friendPictureoperator&(constPicture&,constPicture&);
[*]friendPictureoperator|(constPicture&,constPicture&);
[*]
[*]public:
[*]Picture();
[*]Picture(constchar*const*,int);
[*]Picture(constPicture&);
[*]~Picture();
[*]
[*]Picture&operator=(constPicture&);
[*]
[*]intHeight()const{returnthis->height;}
[*]intWidth()const{returnthis->width;}
[*]private:
[*]intheight,width;
[*]char*data;
[*]voidcopyblock(int,int,constPicture&);
[*]voidclear(int,int,int,int);
[*]
[*]char&position(introw,intcol){returndata;}
[*]charposition(introw,intcol)const{returndata;}
[*]voidinit(inth,intw){height=h;width=w;data=newchar;}
[*]staticintmax(intn,intm){returnm>n?m:n;}
[*]};
[*]
[*]
[*]Picture::
[*]Picture():height(0),width(0),data(0)
[*]{}
[*]
[*]Picture::
[*]Picture(constchar*const*array,intn)//n为列数
[*]{
[*]intw=0;
[*]for(inti=0;i<n;i++)
[*]w=max(w,strlen(array));
[*]init(n,w);
[*]for(inti=0;i<n;i++)
[*]{
[*]constchar*src=array;
[*]intlen=strlen(src);
[*]intj=0;
[*]while(j<len)
[*]{
[*]position(i,j)=src;
[*]j++;
[*]}
[*]while(j<width)
[*]{
[*]position(i,j)='';
[*]j++;
[*]}
[*]}
[*]}
[*]
[*]Picture::
[*]Picture(constPicture&p):
[*]height(p.Height()),width(p.Width()),data(newchar)
[*]{
[*]copyblock(0,0,p);
[*]}
[*]
[*]Picture&
[*]Picture::operator=(constPicture&p)
[*]{
[*]if(this!=&p)//IMPORTANT
[*]{
[*]delete[]data;
[*]init(p.Height(),p.Width());
[*]copyblock(0,0,p);
[*]}
[*]return*this;
[*]}
[*]
[*]Picture::
[*]~Picture()
[*]{
[*]delete[]data;
[*]}
[*]
[*]voidPicture::
[*]copyblock(introw,intcol,constPicture&p)
[*]{
[*]inth=p.Height();
[*]intw=p.Width();
[*]for(inti=0;i<h;i++)
[*]for(intj=0;j<w;j++)
[*]position(i+row,j+col)=p.position(i,j);
[*]}
[*]
[*]voidPicture::
[*]clear(intr1,intc1,intr2,intc2)
[*]{
[*]for(intr=r1;r<r2;++r)
[*]for(intc=c1;c<c2;c++)
[*]position(r,c)='';
[*]}
[*]
[*]ostream&operator<<(ostream&o,constPicture&p)
[*]{
[*]inth=p.Height();
[*]intw=p.Width();
[*]for(inti=0;i<h;i++)
[*]{
[*]for(intj=0;j<w;j++)
[*]o<<p.position(i,j);
[*]o<<endl;
[*]}
[*]returno;
[*]}
[*]
[*]Pictureframe(constPicture&p)
[*]{
[*]Picturer;
[*]r.init(p.Height()+2,p.Width()+2);
[*]for(inti=1;i<r.height-1;++i)
[*]{
[*]r.position(i,0)='|';
[*]r.position(i,r.width-1)='|';
[*]}
[*]for(intj=1;j<r.width-1;++j)
[*]{
[*]r.position(0,j)='-';
[*]r.position(r.height-1,j)='-';
[*]}
[*]r.position(0,0)='+';
[*]r.position(0,r.width-1)='+';
[*]r.position(r.height-1,0)='+';
[*]r.position(r.height-1,r.width-1)='+';
[*]
[*]r.copyblock(1,1,p);
[*]returnr;
[*]}
[*]
[*]Pictureoperator&(constPicture&p,constPicture&q)
[*]{
[*]Picturer;
[*]r.init(p.height+q.height,max(p.width,q.width));
[*]r.clear(0,p.width,p.height,r.width);
[*]r.clear(p.height,q.width,r.height,r.width);
[*]r.copyblock(0,0,p);
[*]r.copyblock(p.height,0,q);
[*]returnr;
[*]}
[*]
[*]Pictureoperator|(constPicture&p,constPicture&q)
[*]{
[*]Picturer;
[*]r.init(max(p.height,q.height),p.width+q.width);
[*]r.clear(p.height,0,r.height,q.height);
[*]r.clear(q.height,p.width,r.height,r.width);
[*]r.copyblock(0,0,p);
[*]r.copyblock(0,p.width,q);
[*]returnr;
[*]}
[*]
[*]intmain()
[*]{
[*]char*init[]={"Paris","inthe","Spring"};
[*]Picturep(init,3);
[*]//cout<<p<<endl;
[*]Pictureq=frame(p);
[*]cout<<frame(q|(p&q))<<endl;
[*]//cout<<q<<endl;
[*]}
[*]
[*]
页: [1]
查看完整版本: 图像模拟类第一次实现 c++沉思录 第九章