1 #ifndef CACHEDIMAGE_H
2 #define CACHEDIMAGE_H
3 
4 #include <iostream>
5 
6 #include "progress.h"
7 #include "imagesource/imagesource.h"
8 
9 // CachedImage_Deferred - the base class for cached images.  Sets up the width, height, type, etc.
10 // and allocated storage, but doesn't actually read the data from the ImageSource until asked.
11 // ReadImage() reads and caches the entire image.
12 // ReadRow() reads and caches a single row.
13 // Generally you won't use this except with ImageSource_Tee.
14 
15 class CachedImage_Deferred
16 {
17 	public:
18 	CachedImage_Deferred(ImageSource *source);
19 	virtual ~CachedImage_Deferred();
20 	virtual void ReadImage(Progress *prog=NULL);
21 	virtual void ReadRow(int row);
22 	virtual ISDataType *GetRow(int row);
23 	virtual ImageSource *GetImageSource();
24 	virtual ISDeviceNValue GetPixel(int x, int y);
25 	protected:
26 	ImageSource *source;
27 	int width, height;
28 	int samplesperpixel;
29 	IS_TYPE type;
30 	ISDataType *imagedata;
31 	CMSProfile *embeddedprofile;
32 	double xres,yres;
33 	friend class ImageSource_CachedImage;
34 	friend class ImageSource_Tee;
35 };
36 
37 
38 // Convenience subclass, this variant completely builds and processes the Cached Image immediately.
39 
40 class CachedImage : public CachedImage_Deferred
41 {
42 	public:
CachedImage_Deferred(source)43 	CachedImage(ImageSource *source, Progress *prog=NULL) : CachedImage_Deferred(source)
44 	{
45 		ReadImage(prog);
46 	}
~CachedImage()47 	virtual ~CachedImage()
48 	{
49 	}
50 	protected:
51 };
52 
53 
54 
55 // The GetImageSource member function of the CachedImage classes will return one of these.
56 // Unlike most imagesources, this one claims no ownership of the source data, so you can
57 // have as many operating concurrently and as many times on the Cached image as you like.
58 
59 class ImageSource_CachedImage : public ImageSource
60 {
61 	public:
62 	ImageSource_CachedImage(CachedImage_Deferred *img);
63 	~ImageSource_CachedImage();
64 	ISDataType *GetRow(int row);
65 	protected:
66 	CachedImage_Deferred *image;
67 };
68 
69 #endif
70 
71