1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95
|
#include <iostream>
#include "profilemanager/lcmswrapper.h"
#include "cachedimage.h"
using namespace std;
CachedImage_Deferred::CachedImage_Deferred(ImageSource *source)
: source(source), width(source->width), height(source->height),
samplesperpixel(source->samplesperpixel), type(source->type), embeddedprofile(NULL)
{
cerr << "In CachedImage_Deferred constructor" << endl;
cerr << "Image type: " << type << endl;
cerr << "(" << source->type << ")" << endl;
imagedata=new ISDataType[width*height*samplesperpixel];
CMSProfile *prof=source->GetEmbeddedProfile();
if(prof)
embeddedprofile=new CMSProfile(*prof);
}
CachedImage_Deferred::~CachedImage_Deferred()
{
if(imagedata)
delete[] imagedata;
if(source);
delete source;
if(embeddedprofile)
delete embeddedprofile;
}
void CachedImage_Deferred::ReadImage()
{
for(int row=0;row<height;++row)
ReadRow(row);
}
void CachedImage_Deferred::ReadRow(int row)
{
ISDataType *srcdata=source->GetRow(row);
ISDataType *dstdata=GetRow(row);
int spr=width*samplesperpixel;
for(int s=0;s<spr;++s)
dstdata[s]=srcdata[s];
}
ISDataType *CachedImage_Deferred::GetRow(int row)
{
if(row>=height)
row=height;
if(row<0)
row=0;
return(imagedata+row*width*samplesperpixel);
}
ImageSource *CachedImage_Deferred::GetImageSource()
{
return(new ImageSource_CachedImage(this));
}
// ImageSource_CachedImage
ImageSource_CachedImage::ImageSource_CachedImage(CachedImage_Deferred *img) : ImageSource(), image(img)
{
width=img->width;
height=img->height;
samplesperpixel=img->samplesperpixel;
type=img->type;
cerr << "Image type: " << type << endl;
randomaccess=true;
if(img->embeddedprofile)
{
CMSProfile *prof=new CMSProfile(*img->embeddedprofile);
SetEmbeddedProfile(prof,true);
}
}
ImageSource_CachedImage::~ImageSource_CachedImage()
{
}
ISDataType *ImageSource_CachedImage::GetRow(int row)
{
return(image->GetRow(row));
}
|