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

Example for converting an interleaved to a planar image

, ImageConvert

Author
MIP
/*
This file is part of the BIAS library (Basic ImageAlgorithmS).
Copyright (C) 2003, 2004 (see file CONTACTS 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
*/
/**
@example ExampleToPlanar.cpp
@relates ImageBase, ImageConvert
@brief Example for converting an interleaved to a planar image
@ingroup g_examples
@author MIP
*/
#include <Base/Image/ImageBase.hh>
#include <Base/ImageUtils/ImageDraw.hh>
#include <Base/Image/ImageConvert.hh>
#include <Base/Image/ImageIO.hh>
using namespace BIAS;
using namespace std;
int main()
{
const unsigned int w = 640;
const unsigned int h = 400;
Image<unsigned char> im(w, h, 3);
unsigned char* pData = im.GetImageData();
//fill data
for(unsigned int i=0; i<(w*h); i++)
{
//store lowest 24bits of i in rgbchannels
unsigned char ti = (unsigned char)(i%256); //get lsbyte
pData[i*3+0] = ti;
pData[i*3+1] = (unsigned char)((i>>8)%256);
pData[i*3+2] = (unsigned char)((i>>16)%256);
}
ImageIO::Save("inter0.mip", im);
if(!plan1.IsPlanar()||(plan1.IsInterleaved()))
{
cout<<"image planar flags inconsistend (plan1)"<<endl;
return -2;
}
pData = im.GetImageData(); //data pointer is now a different one...
for(unsigned int i=0; i<(w*h); i++)
{
//store lowest 24bits of i in rgbchannels
unsigned char ti = (unsigned char)(i%256); //get lsbyte
if((pData[i*3+0] != ti)||(pData[i*3+1] != ((i>>8)%256))
||(pData[i*3+2] != ((i>>16)%256)))
{
cout<<"image data changed after conversion"<<endl;
return -1;
}
}
if(im.IsPlanar()||(!im.IsInterleaved()))
{
cout<<"image planar interleaved flags inconsistend"<<endl;
return -2;
}
if(!plan1.IsPlanar()||(plan1.IsInterleaved()))
{
cout<<"image planar interleaved flags inconsistend (plan1)"<<endl;
return -2;
}
ImageIO::Save("planar1.mip", plan1);
ImageIO::Load("planar1.mip",planLoaded);
if(!planLoaded.IsPlanar()||(planLoaded.IsInterleaved()))
{
cout<<"loaded image not planar anymore..."<<endl;
return -3;
}
ImageConvert::ToInterleaved(planLoaded,planLoaded);
pData = im.GetImageData(); //data pointer is now a different one...
for(unsigned int i=0; i<(w*h); i++)
{
//store lowest 24bits of i in rgbchannels
unsigned char ti = (unsigned char)(i%256); //get lsbyte
if((pData[i*3+0] != ti)||(pData[i*3+1] != ((i>>8)%256))
||(pData[i*3+2] != ((i>>16)%256)))
{
cout<<"image data changed after conversion"<<endl;
return -1;
}
}
if(planLoaded.IsPlanar()||(!planLoaded.IsInterleaved()))
{
cout<<"image planar interleaved flags inconsistend"<<endl;
return -4;
}
ImageIO::Save("inter1.mip", planLoaded); //inplace converted ...
return 0;
}