[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Meeting results



//Pixels have these attributes and are stored together in this geometry:
//This class renamed to Pixel_Description

class Pixel_Description {
        unsigned short ID;      Specific ID number 
        char code;              Code marker (CVS identifier)
        DataType data_type;     IEEE_INTEGER, etc.
        byte_orders byte_order; How bits and bytes are ordered and
stored
        int pixel_bits;         Number of bits in this pixel
        float pixel_bytes;      Number of bytes this pixel fits into
	int axes;               The number of axes in the data
	int axis_order[axes];	The order in which the axes are stored
        Axis_Vector axis[axes]; An array of axis information
};

// These types are more generic
enum byte_orders { ICL_BIG_ENDIAN, ICL_LITTLE_ENDIAN, etc. };
enum DataType { IEEE_INTEGER, IEEE_FLOATING_POINT, IEEE_DOUBLE, etc. };

class Axis_Vector {
        int size;               How many pixels are in this dimension
        Direction direction;    Either positive or negative
};

enum Direction { '+', '-' };

// The order is relative to an assumed order of axes, namely 
// (0,0,0) at the uppermost left corner of the "cube"
// +x going "across"
// +y going "down"
// +z going "back"

// As an example
// Sample=X,3samples across; Band=Z,size=2 bands in; Line=Y,size4 lines
down
axis_order[0] = 0;
axis_order[1] = 2;
axis_order[2] = 1;
// Now we know that the third axis (Z) is the second fastest
axis[0].size = 2; 		// 0-based
axis[0].direction = '+';
axis[1].size = 1; 		// 0-based
axis[1].direction = '+';
axis[2].size = 3; 		// 0-based
axis[2].direction = '+';
//This allows us to step through the arrays in the original dimensions


//Images have this kind of structure:

//Image-+
//      +->Pixel_Data-+
//      |             +-->Pixel_Description----->Axis_Vector
//      |             +-->Pixel_Buffer
//      |
//      +->Attributes-+
//      |             +-->Name
//      |             +-->Value
//      |
//      +->Description
//      |
//      +->Driver-----+
//                    +-->File_Info
//                    +-->Private


//The Image object will be passed around between the APP, ICL and
DRIVER.
//Note that we are potentially passing a C++ object to a C driver.
//In this case there will need to be struct munging.  UGH!
//The Value of an Attribute will be an object describing an Attribute.  
//There needs to be more discussion on this point.

//The Pixel_Buffer will hold the actual array of pixel values
//The Pixel_Description entries are derived from the Attributes

//Description is some as-yet-to-be-discussed user image description

//Driver contains the File_Info in some way that can be queried
//Private is what only Mr. and Ms. Driver needs to know.  No peeking!!

//The mini-drivers are statically compiled and linked.  
//The DRIVER is dynamically linked.

//What we don't know yet:
//	How do we subset an image?
//	How do we write an image to a file?
//	How do we write an image to memory?
//	In general, what is the chain of events for changing an image?
//	For example, we change the dimensions of the image by subsetting
//	the image.  Now, how do the appropriate attributes get changed, 
//	and at what level(s) do they get changed, and when?