2
* imagesource_desaturate.cpp
4
* Supports Greyscale and RGB data
5
* Supports random access
7
* Copyright (c) 2007 by Alastair M. Robinson
8
* Distributed under the terms of the GNU General Public License -
9
* see the file named "COPYING" for more details.
11
* TODO: Support CMYK Data
20
#include "imagesource_desaturate.h"
24
ImageSource_Desaturate::~ImageSource_Desaturate()
31
ISDataType *ImageSource_Desaturate::GetRow(int row)
36
ISDataType *srcdata=source->GetRow(row);
42
// Grey images are already desaturated by definition
48
for(int s=0;s<width*samplesperpixel;s+=samplesperpixel)
50
int t=(srcdata[s]+srcdata[s+1]+srcdata[s+2])/3;
51
rowbuffer[s]=rowbuffer[s+1]=rowbuffer[s+2]=t;
57
for(int s=0;s<width*samplesperpixel;s+=samplesperpixel)
59
int t=(srcdata[s]+srcdata[s+1]+srcdata[s+2])/3;
60
rowbuffer[s]=rowbuffer[s+1]=rowbuffer[s+2]=t;
61
rowbuffer[s+3]=srcdata[s+3];
66
throw "Desaturate: type not (yet) handled";
75
ImageSource_Desaturate::ImageSource_Desaturate(ImageSource *source)
76
: ImageSource(source), source(source)
78
if(STRIP_ALPHA(source->type)==IS_TYPE_CMYK)
79
throw "Desaturate: CMYK Images not yet supported.";