Class RMImageData
- java.lang.Object
-
- com.inductiveautomation.rm.graphics.RMImageData
-
- All Implemented Interfaces:
java.lang.Cloneable
public class RMImageData extends java.lang.Object implements java.lang.Cloneable
This class manages image data. Each instance holds the raw image data and provides methods to return attributes of the decoded image.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static interface
RMImageData.ImageReader
An interface for classes that can handle image reading for RMImageData.static interface
RMImageData.ImageSupplier
The preferred method for seeding RMImageData with an image source.
-
Field Summary
Fields Modifier and Type Field Description static RMImageData
EMPTY
-
Constructor Summary
Constructors Modifier Constructor Description protected
RMImageData(WebURL url)
protected
RMImageData(java.lang.Object aSource, int aPageIndex)
Returns an image data for a given source and page index.
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description static boolean
canRead(java.lang.String anExt)
Returns whether given extension is supported.RMImageData
clone()
Standard clone implementation.protected byte[]
createBytes()
Creates bytes from the image (loaded from the source).protected void
createBytesDecoded()
Creates decoded image bytes for the image.protected java.awt.image.BufferedImage
createImage()
Creates a buffered image for image data.boolean
equals(java.lang.Object o)
int
getAlphaColorIndex()
Color map support: returns the index of the transparent color in a color map image.int
getBitsPerPixel()
Returns the number of bits per pixel (derived from bits per sample and samples per pixel).int
getBitsPerSample()
Returns the number of bits per sample (eg, 24 bit RGB image is 8 bits per sample).byte[]
getBytes()
Returns the original bytes for the image (loaded from the source).byte[]
getBytesDecoded()
Returns the decoded image bytes for the image.int
getBytesPerRow()
Returns the number of bytes per row (derived from width and bits per pixel).byte[]
getColorMap()
Color map support: returns the bytes of color map from a color map image.int
getHeight()
Returns the number of pixels vertically.java.awt.image.BufferedImage
getImage()
Returns the buffered image for image data.static RMImageData
getImageData(java.lang.Object aSource)
Returns an image data loaded from aSource.static RMImageData
getImageData(java.lang.Object aSource, int aPageIndex)
Returns an image data loaded from aSource.static RMImageData
getImageDataBypassCache(java.lang.Object aSource, int aPageIndex)
double
getImageHeight()
Returns the actual display height of the image in printer's points using the image DPI if available.double
getImageWidth()
Returns the actual display width of the image in printer's points using the image DPI if available.java.lang.String
getName()
Returns the name for the image (assigned from our hashCode).RMImageData
getPage(int aPage)
Returns the image data for a successive page.int
getPageCount()
Returns the total number of pages for the image.int
getPageIndex()
Returns the page index for the image.RMImageData.ImageReader
getReader()
Returns the reader used to load the image.int
getSamplesPerPixel()
Returns the number of samples per pixel (RGB=3, RGBA=4, GrayScale=1, etc.).java.lang.Object
getSource()
Returns the original source for the image (byte[], File, InputStream or whatever).WebURL
getSourceURL()
Returns the source URL, if loaded from URL.java.lang.String
getType()
Returns the type for the image (one of gif, jpg, png, pdf, etc.).int
getWidth()
Returns the number of pixels horizontally.boolean
hasAlpha()
Color map support: returns whether color map image has a transparent color.boolean
hasColorMap()
Returns whether image uses a color map.int
hashCode()
boolean
isColor()
Returns whether the image is non-grayscale.boolean
isValid()
Returns whether the image was loaded successfully.void
paint(RMShapePainter aPntr, double x, double y, double w, double h)
Draws image data in given rect.void
peekInflatedImage(java.util.function.Consumer<RMImageData> inflatedDataConsumer)
Renders the backing BufferedImage and passes it to the supplied consumer.protected void
refresh()
Refreshes data from source.protected void
setSource(java.lang.Object aSource, int aPageIndex)
Sets the source.
-
-
-
Field Detail
-
EMPTY
public static RMImageData EMPTY
-
-
Constructor Detail
-
RMImageData
protected RMImageData(WebURL url)
-
RMImageData
protected RMImageData(java.lang.Object aSource, int aPageIndex)
Returns an image data for a given source and page index. Source can be an image or something that can provide bytes, but the preferred source is anRMImageData.ImageSupplier
to prevent the backing image (or byte array) from being held in memory until report generation is completed which can quickly consume all available memory for large reports. Page index only applicable for multi-page image types, like PDF.
-
-
Method Detail
-
getImageData
public static RMImageData getImageData(java.lang.Object aSource)
Returns an image data loaded from aSource.
-
getImageData
public static RMImageData getImageData(java.lang.Object aSource, int aPageIndex)
Returns an image data loaded from aSource. If image type supports multiple pages, page index can be specified.
-
getImageDataBypassCache
public static RMImageData getImageDataBypassCache(java.lang.Object aSource, int aPageIndex)
-
getSource
public java.lang.Object getSource()
Returns the original source for the image (byte[], File, InputStream or whatever).
-
setSource
protected void setSource(java.lang.Object aSource, int aPageIndex)
Sets the source. The preferred mechanisms for Images isRMImageData.ImageSupplier
To prevent the image from being held in memory which can be catastrophic for large reports.
-
getSourceURL
public WebURL getSourceURL()
Returns the source URL, if loaded from URL.
-
refresh
protected void refresh()
Refreshes data from source.
-
getImage
public java.awt.image.BufferedImage getImage()
Returns the buffered image for image data.
-
createImage
protected java.awt.image.BufferedImage createImage()
Creates a buffered image for image data.
-
getBytes
public byte[] getBytes()
Returns the original bytes for the image (loaded from the source).
-
createBytes
protected byte[] createBytes()
Creates bytes from the image (loaded from the source).
-
getBytesDecoded
public byte[] getBytesDecoded()
Returns the decoded image bytes for the image.
-
createBytesDecoded
protected void createBytesDecoded()
Creates decoded image bytes for the image.
-
getName
public java.lang.String getName()
Returns the name for the image (assigned from our hashCode).
-
getType
public java.lang.String getType()
Returns the type for the image (one of gif, jpg, png, pdf, etc.).
-
getPageIndex
public int getPageIndex()
Returns the page index for the image.
-
getPageCount
public int getPageCount()
Returns the total number of pages for the image.
-
getWidth
public int getWidth()
Returns the number of pixels horizontally.
-
getHeight
public int getHeight()
Returns the number of pixels vertically.
-
getImageWidth
public double getImageWidth()
Returns the actual display width of the image in printer's points using the image DPI if available.
-
getImageHeight
public double getImageHeight()
Returns the actual display height of the image in printer's points using the image DPI if available.
-
isColor
public boolean isColor()
Returns whether the image is non-grayscale.
-
getSamplesPerPixel
public int getSamplesPerPixel()
Returns the number of samples per pixel (RGB=3, RGBA=4, GrayScale=1, etc.).
-
getBitsPerSample
public int getBitsPerSample()
Returns the number of bits per sample (eg, 24 bit RGB image is 8 bits per sample).
-
getBitsPerPixel
public int getBitsPerPixel()
Returns the number of bits per pixel (derived from bits per sample and samples per pixel).
-
getBytesPerRow
public int getBytesPerRow()
Returns the number of bytes per row (derived from width and bits per pixel).
-
hasAlpha
public boolean hasAlpha()
Color map support: returns whether color map image has a transparent color.
-
getAlphaColorIndex
public int getAlphaColorIndex()
Color map support: returns the index of the transparent color in a color map image.
-
hasColorMap
public boolean hasColorMap()
Returns whether image uses a color map.
-
getColorMap
public byte[] getColorMap()
Color map support: returns the bytes of color map from a color map image.
-
getPage
public RMImageData getPage(int aPage)
Returns the image data for a successive page.
-
getReader
public RMImageData.ImageReader getReader()
Returns the reader used to load the image.
-
isValid
public boolean isValid()
Returns whether the image was loaded successfully.
-
peekInflatedImage
public void peekInflatedImage(java.util.function.Consumer<RMImageData> inflatedDataConsumer)
Renders the backing BufferedImage and passes it to the supplied consumer. This is useful for capturing details like the image bounds etc for any implementations of drawing this image data on an exported report or similar. The image supplied to the consumer or the accompanying byte array(s) should not be held onto in memory. The supplied images are rendered with hi DPi's and can be very large, quickly consuming all available memory in larger reports. Note thatEMPTY
may be returned if there is no backing image (unlikely)
-
equals
public boolean equals(java.lang.Object o)
- Overrides:
equals
in classjava.lang.Object
-
hashCode
public int hashCode()
- Overrides:
hashCode
in classjava.lang.Object
-
clone
public RMImageData clone()
Standard clone implementation.- Overrides:
clone
in classjava.lang.Object
-
canRead
public static boolean canRead(java.lang.String anExt)
Returns whether given extension is supported.
-
paint
public void paint(RMShapePainter aPntr, double x, double y, double w, double h)
Draws image data in given rect.
-
-