Interface MFImage
Images are represented as arrays of integers as per the X3D specification Section 5.7 SFImage and MFImage. Pixel values are between 0 and 256 and represented as integers to maintain consistency with java's ImageConsumer interface and PixelGrabber class.
- Version:
- $Revision: 1.5 $
-
Method Summary
Modifier and TypeMethodDescriptionvoid
append
(int value) Places a new value at the end of the existing value, increasing the field length accordingly.void
clear()
Removes all values in the field and changes the field size to zero.int
getComponents
(int imgIndex) Get the number of colour components in the image.int
getHeight
(int imgIndex) Get the height of the image.getImage
(int imgIndex) Fetch the Java representation of the underlying image from these pixels.void
getPixels
(int imgIndex, int[] pixels) Get the image pixel value in the given eventOut.int
getWidth
(int imgIndex) Get the width of the image at index i in the array.void
insertValue
(int index, int value) Inserts a value into an existing index of the field.void
removeValue
(int index) Removes one value from the field.void
set1Value
(int index, int value) Set one pixel value at the correct index in this field.void
set1Value
(int imgIndex, int width, int height, int components, int[] pixels) Set the image value in the given writable field.void
setImage
(int imgIndex, RenderedImage img) Set the image value in the given writable field to the new image defined by a set of pixels.void
setImage
(RenderedImage[] img) Set the given writable field to the new array of image values.void
setSubImage
(int imgIndex, RenderedImage img, int srcWidth, int srcHeight, int srcXOffset, int srcYOffset, int destXOffset, int destYOffset) Copy a region of the argument RenderedImage to replace a portion of the current SFimage.void
setValue
(int numValues, int[] value) Set the value of the array to this value.Methods inherited from interface org.web3d.x3d.sai.X3DField
addX3DEventListener, getDefinition, getUserData, isReadable, isWritable, removeX3DEventListener, setUserData
-
Method Details
-
append
void append(int value) Places a new value at the end of the existing value, increasing the field length accordingly.- Parameters:
value
- The value to append
-
clear
void clear()Removes all values in the field and changes the field size to zero. -
getWidth
int getWidth(int imgIndex) Get the width of the image at index i in the array.- Parameters:
imgIndex
- The index of the image in the array- Returns:
- The width of the image in pixels
-
getHeight
int getHeight(int imgIndex) Get the height of the image.- Parameters:
imgIndex
- The index of the image in the array- Returns:
- The height of the image in pixels
-
getComponents
int getComponents(int imgIndex) Get the number of colour components in the image. The value will always be between 1 and 4 indicating the number of components of the colour specification to be read from the image pixel data.- Parameters:
imgIndex
- The index of the image in the array- Returns:
- The number of components
-
getPixels
void getPixels(int imgIndex, int[] pixels) Get the image pixel value in the given eventOut.The number of items in the pixels array will be
width * height
. If there are less items than this an ArrayIndexOutOfBoundsException will be generated. The integer values are represented according to the number of components.1 Component Images
The integer has the intensity value stored in the lowest byte and can be obtained:intensity = (pixel[i] ) &0xFF;
2 Component Images
The integer has the transparency value stored in the lowest byte and the intensity in the next byte:intensity = (pixel[i] >> 8) &0xFF; alpha = (pixel[i] ) &0xFF;
3 Component Images
The three color components are stored in the integer array as follows:red = (pixel[i] >> 16) &0xFF; green = (pixel[i] >> 8) &0xFF; blue = (pixel[i] ) &0xFF;
4 Component Images
The integer has the value stored in the array as follows:red = (pixel[i] >> 24) &0xFF; green = (pixel[i] >> 16) &0xFF; blue = (pixel[i] >> 8) &0xFF; alpha = (pixel[i] ) &0xFF;
The width and height values must be greater than or equal to zero. The number of components is between 1 and 4. Any value outside of these bounds will generate an IllegalArgumentException.
- Parameters:
imgIndex
- The index of the image in the arraypixels
- The array to copy pixel values into
-
getImage
Fetch the Java representation of the underlying image from these pixels. This is the same copy that the browser uses to generate texture information from.- Parameters:
imgIndex
- The index of the image in the array- Returns:
- The image reference representing the current state
-
insertValue
Inserts a value into an existing index of the field. Current field values from the index to the end of the field are shifted down and the field length is increased by one to accommodate the new element. This method modifies the integer array rather than the conceptual image array. If the index is out of the bounds of the current field an ArrayIndexOutofBoundsException will be generated.- Parameters:
index
- The position at which to insertvalue
- The new element to insert- Throws:
ArrayIndexOutOfBoundsException
- The index was outside the current field size.
-
removeValue
Removes one value from the field. Values at indices above the removed element will be shifted down by one and the size of the field will be reduced by one. This method modifies the integer array rather than the conceptual image array.- Parameters:
index
- The position of the value to remove.- Throws:
ArrayIndexOutOfBoundsException
- The index was outside the current field size.
-
setImage
void setImage(int imgIndex, RenderedImage img) throws InvalidOperationTimingException, InvalidFieldValueException, InvalidWritableFieldException, InvalidFieldException Set the image value in the given writable field to the new image defined by a set of pixels.- Parameters:
imgIndex
- The index of the image in the arrayimg
- The new image to use as the source- Throws:
InvalidOperationTimingException
InvalidFieldValueException
InvalidWritableFieldException
InvalidFieldException
-
setSubImage
void setSubImage(int imgIndex, RenderedImage img, int srcWidth, int srcHeight, int srcXOffset, int srcYOffset, int destXOffset, int destYOffset) throws InvalidOperationTimingException, InvalidFieldValueException, InvalidWritableFieldException, InvalidFieldException Copy a region of the argument RenderedImage to replace a portion of the current SFimage.The sub image set shall not resize the base image representation and therefore performs an intersection clip of the provided image. The user provided image shall be of the same format (pixel depth, pixel representation) as the original image obtained through the getImage() method.
RenderedImages are row order from top to bottom. A 4x8 RenderImage is indexed as follows:
X >01234567 ---------- 0 |********| 1 |********| 2 |********| 3 |********| ^ ---------- Y
SFImages are row order from bottom to top. A 4x8 RenderImage is indexed as follows:X >01234567 ---------- 3 |********| 2 |********| 1 |********| 0 |********| ^ ---------- Y
Note: The parameter srcYOffset is referenced to the RenderedImage object (indexed top to bottom).
The parameter destYOffset is referenced to the SFImage object (indexed bottom to top).- Parameters:
imgIndex
- The index of the image in the arrayimg
- The new image to use as the sourcesrcWidth
- The width of the argument sub-image region to copysrcHeight
- The height of the argument sub-image region to copysrcXOffset
- The initial x dimension (width) offset into the argument sub-image that begins the region to copysrcYOffset
- The initial y dimension (height) offset into the argument sub-image that begins the region to copydestXOffset
- The initial x dimension (width) offset in the SFimage object that begins the region to receive the copydestYOffset
- The initial y dimension (height) offset in the SFimage object that begins the region to receive the copy- Throws:
InvalidOperationTimingException
InvalidFieldValueException
InvalidWritableFieldException
InvalidFieldException
-
set1Value
void set1Value(int index, int value) Set one pixel value at the correct index in this field. Basically a single pixel set, but it could also be width, height, number of components. This must be used with great care as it could well corrupt the user data.- Parameters:
index
- The position in the array to setvalue
- The value to use at that position
-
set1Value
void set1Value(int imgIndex, int width, int height, int components, int[] pixels) Set the image value in the given writable field.Image values are specified using a width, height and the number of components. The number of items in the pixels array must be at least
width * height
. If there are less items than this an ArrayIndexOutOfBoundsException will be generated. The integer values are represented according to the number of components. If the integer contains values in bytes that are not used by the number of components for that image, the values are ignored.1 Component Images
The integer has the intensity value stored in the lowest byte and can be obtained:intensity = (pixel[i] ) &0xFF;
2 Component Images
The integer has the transparency value stored in the lowest byte and the intensity in the next byte:intensity = (pixel[i] >> 8) &0xFF; alpha = (pixel[i] ) &0xFF;
3 Component Images
The three color components are stored in the integer array as follows:red = (pixel[i] >> 16) &0xFF; green = (pixel[i] >> 8) &0xFF; blue = (pixel[i] ) &0xFF;
4 Component Images
The integer has the value stored in the array as follows:red = (pixel[i] >> 24) &0xFF; green = (pixel[i] >> 16) &0xFF; blue = (pixel[i] >> 8) &0xFF; alpha = (pixel[i] ) &0xFF;
The width and height values must be greater than or equal to zero. The number of components is between 1 and 4. Any value outside of these bounds will generate an IllegalArgumentException.
- Parameters:
imgIndex
- The index of the image in the arraywidth
- The width of the image in pixelsheight
- The height of the image in pixelscomponents
- The number of colour components [1-4]pixels
- The array of pixel values as specified above.- Throws:
IllegalArgumentException
- The number of components or width/ height are illegal values.ArrayIndexOutOfBoundsException
- The number of pixels provided by the caller is not enough for the width * height.
-
setValue
void setValue(int numValues, int[] value) Set the value of the array to this value. The values are raw integers and are to be interpreted according to the rules of the MFImage field. So the first three values of the array will be width, height, depth and then the appropriate number of pixels, more width height depth etc.- Parameters:
numValues
- The number of valid elements in valuevalue
- The value to use- Throws:
IllegalArgumentException
- The number of components or width/ height are illegal values.ArrayIndexOutOfBoundsException
- The number of pixels provided by the caller is not enough for the width * height.
-
setImage
void setImage(RenderedImage[] img) throws InvalidOperationTimingException, InvalidFieldValueException, InvalidWritableFieldException, InvalidFieldException Set the given writable field to the new array of image values.- Parameters:
img
- The new images to use as the source- Throws:
InvalidOperationTimingException
InvalidFieldValueException
InvalidWritableFieldException
InvalidFieldException
-