六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 39|回复: 0

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

[复制链接]

升级  72.35%

801

主题

801

主题

801

主题

探花

Rank: 6Rank: 6

积分
2447
 楼主| 发表于 2013-1-26 13:45:33 | 显示全部楼层 |阅读模式
<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[row*width+col];}
  • charposition(introw,intcol)const{returndata[row*width+col];}
  • voidinit(inth,intw){height=h;width=w;data=newchar[height*width];}
  • 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];
  • j++;
  • }
  • while(j<width)
  • {
  • position(i,j)='';
  • j++;
  • }
  • }
  • }

  • Picture::
  • Picture(constPicture&p):
  • height(p.Height()),width(p.Width()),data(newchar[p.Height()*p.Width()])
  • {
  • 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;
  • }


您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表