Basic Image AlgorithmS Library  2.8.0
 All Classes Namespaces Functions Variables Typedefs Enumerations Enumerator Friends Groups Pages
ExampleBresenham.cpp

Example for using bresenham drawing circle and line

,BresenhamCircle,Scanline

Author
MIP
/*
This file is part of the BIAS library (Basic ImageAlgorithmS).
Copyright (C) 2003-2009 (see file CONTACT for details)
Multimediale Systeme der Informationsverarbeitung
Institut fuer Informatik
Christian-Albrechts-Universitaet Kiel
BIAS is free software; you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License as published by
the Free Software Foundation; either version 2.1 of the License, or
(at your option) any later version.
BIAS is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public License
along with BIAS; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
// must be first:
//#include <Base/Common/LeakChecking.h>
/**
@example ExampleBresenham.cpp
@relates Bresenham,BresenhamCircle,Scanline
@brief Example for using bresenham drawing circle and line
@ingroup g_examples
@author MIP
*/
#include "Base/Image/ImageIO.hh"
#include "Base/ImageUtils/Bresenham.hh"
#include "Base/ImageUtils/BresenhamCircle.hh"
#include "Base/ImageUtils/BresenhamCircleEighth.hh"
#include "Base/ImageUtils/Scanline.hh"
#include "Base/Image/Image.hh"
using namespace BIAS;
using namespace std;
int main (int argc, char *argv[])
{
Image<unsigned char> im(200, 200, 1);
unsigned char **ida=im.GetImageDataArray();
int next[]={0,0}, start[]={10,30}, end[]={120,90}, center[]={100, 150};
int epsilon=4, radius=30;
if (argc==5){
start[0]=atoi(argv[1]);
start[1]=atoi(argv[2]);
end[0]=atoi(argv[3]);
end[1]=atoi(argv[4]);
} else if (argc!=1){
cerr << endl << argv[0] << " [ startx starty endx endy ]" << endl << endl;
}
im.FillImageWithConstValue((unsigned char)0);
// draw circle with BresenhamCircle
BresenhamCircle bcirc(center, radius);
while (bcirc.GetNext(next)){
ida[next[1]][next[0]]=255;
}
// draw 1/8 circle with BresenhamCircleEighth
center[0]-=5;
center[1]-=5;
BresenhamCircleEighth bce(center, radius);
while (bce.GetNext(next)){
ida[next[1]][next[0]]=255;
}
// draw line with Scanline
Scanline sl(start, end, epsilon);
while (sl.GetNext(next)){
ida[next[1]][next[0]]=255;
}
// draw line with Bresenham
Bresenham bres(start, end);
while (bres.GetNext(next)){
ida[next[1]][next[0]]=0;
}
ImageIO::Save("bresenham", im);
return 0;
}