Class URLImage
- All Implemented Interfaces:
ActionSource
URLImage allows us to create an image from a URL. If the image was downloaded
already it is fetched from cache; if not it is downloaded optionally scaled/adapted
and placed in cache.
By default an image is fetched lazily as it is asked for by the GUI unless the fetch() method is invoked in which case the IO code is executed immediately.
This sample code show a URLImage that is fetched to the title area background and scaled/cropped
to fit device specific dimensions.
Toolbar.setGlobalToolbar(true);
Form hi = new Form("Toolbar", new BoxLayout(BoxLayout.Y_AXIS));
EncodedImage placeholder = EncodedImage.createFromImage(Image.createImage(hi.getWidth(), hi.getWidth() / 5, 0xffff0000), true);
URLImage background = URLImage.createToStorage(placeholder, "400px-AGameOfThrones.jpg",
"http://awoiaf.westeros.org/images/thumb/9/93/AGameOfThrones.jpg/400px-AGameOfThrones.jpg");
background.fetch();
Style stitle = hi.getToolbar().getTitleComponent().getUnselectedStyle();
stitle.setBgImage(background);
stitle.setBackgroundType(Style.BACKGROUND_IMAGE_SCALED_FILL);
stitle.setPaddingUnit(Style.UNIT_TYPE_DIPS, Style.UNIT_TYPE_DIPS, Style.UNIT_TYPE_DIPS, Style.UNIT_TYPE_DIPS);
stitle.setPaddingTop(15);
SpanButton credit = new SpanButton("This excerpt is from A Wiki Of Ice And Fire. Please check it out by clicking here!");
credit.addActionListener((e) -> Display.getInstance().execute("http://awoiaf.westeros.org/index.php/A_Game_of_Thrones"));
hi.add(new SpanLabel("A Game of Thrones is the first of seven planned novels in A Song of Ice and Fire, an epic fantasy series by American author George R. R. Martin. It was first published on 6 August 1996. The novel was nominated for the 1998 Nebula Award and the 1997 World Fantasy Award,[1] and won the 1997 Locus Award.[2] The novella Blood of the Dragon, comprising the Daenerys Targaryen chapters from the novel, won the 1997 Hugo Award for Best Novella. ")).
add(new Label("Plot introduction", "Heading")).
add(new SpanLabel("A Game of Thrones is set in the Seven Kingdoms of Westeros, a land reminiscent of Medieval Europe. In Westeros the seasons last for years, sometimes decades, at a time.\n\n" +
"Fifteen years prior to the novel, the Seven Kingdoms were torn apart by a civil war, known alternately as \"Robert's Rebellion\" and the \"War of the Usurper.\" Prince Rhaegar Targaryen kidnapped Lyanna Stark, arousing the ire of her family and of her betrothed, Lord Robert Baratheon (the war's titular rebel). The Mad King, Aerys II Targaryen, had Lyanna's father and eldest brother executed when they demanded her safe return. Her second brother, Eddard, joined his boyhood friend Robert Baratheon and Jon Arryn, with whom they had been fostered as children, in declaring war against the ruling Targaryen dynasty, securing the allegiances of House Tully and House Arryn through a network of dynastic marriages (Lord Eddard to Catelyn Tully and Lord Arryn to Lysa Tully). The powerful House Tyrell continued to support the King, but House Lannister and House Martell both stalled due to insults against their houses by the Targaryens. The civil war climaxed with the Battle of the Trident, when Prince Rhaegar was killed in battle by Robert Baratheon. The Lannisters finally agreed to support King Aerys, but then brutally... ")).
add(credit);
ComponentAnimation title = hi.getToolbar().getTitleComponent().createStyleAnimation("Title", 200);
hi.getAnimationManager().onTitleScrollAnimation(title);
hi.show();
This sample code shows the usage of the nestoria API to fill out an infinitely scrolling list in it
we use URLImage to fetch the icon.
Form hi = new Form("InfiniteScrollAdapter", BoxLayout.y());
Style s = UIManager.getInstance().getComponentStyle("MultiLine1");
FontImage p = FontImage.createMaterial(FontImage.MATERIAL_PORTRAIT, s);
EncodedImage placeholder = EncodedImage.createFromImage(
p.scaled(p.getWidth() * 3, p.getHeight() * 3),
false);
InfiniteScrollAdapter.createInfiniteScroll(hi.getContentPane(), () -> {
MultiButton[] cmps = new MultiButton[10];
for (int i = 0; i < cmps.length; i++) {
String imageKey = "listing-" + i;
String imageUrl = "https://example.com/images/" + i + ".png";
MultiButton row = new MultiButton("Listing " + i);
row.setIcon(URLImage.createToStorage(placeholder, imageKey, imageUrl));
cmps[i] = row;
}
InfiniteScrollAdapter.addMoreComponents(hi.getContentPane(), cmps, true);
}, true);
hi.show();
You can use adapters with masks using syntax similar to this to create a round image mask for a URLImage:
Image roundMask = Image.createImage(placeholder.getWidth(), placeholder.getHeight(), 0xff000000);
Graphics gr = roundMask.getGraphics();
gr.setColor(0xffffff);
gr.fillArc(0, 0, placeholder.getWidth(), placeholder.getHeight(), 0, 360);
URLImage.ImageAdapter ada = URLImage.createMaskAdapter(roundMask);
Image i = URLImage.createToStorage(placeholder, "fileNameInStorage", "http://xxx/myurl.jpg", ada);
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionstatic interfaceInvoked in a case of an errorstatic interfaceAllows applying resize logic to downloaded images you can use constant resize behaviors defined in this class. -
Field Summary
FieldsModifier and TypeFieldDescriptionstatic final intFlag used byjava.lang.String, com.codename1.ui.Image, int).static final intFlag used byjava.lang.String, com.codename1.ui.Image, int)Equivalent to#RESIZE_SCALE.static final intFlag used byjava.lang.String, com.codename1.ui.Image, int).static final URLImage.ImageAdapterWill fail if the downloaded image has a different size from the placeholder imagestatic final URLImage.ImageAdapterScales the image to match the size of the new image exactlystatic final URLImage.ImageAdapterScales the image to match to fill the area while preserving aspect ratio -
Method Summary
Modifier and TypeMethodDescriptionbooleananimate()Advances this image's animation state, if it is animated.static ImagecreateCachedImage(String imageName, String url, Image placeholder, int resizeRule) Creates an image that will be downloaded on the fly as necessary.static URLImage.ImageAdaptercreateMaskAdapter(Image imageMask) Creates an adapter that uses an image as a Mask, this is roughly the same as SCALE_TO_FILL with the exception that a mask will be applied later on.static URLImage.ImageAdaptercreateMaskAdapter(Object mask) static URLImagecreateToFileSystem(EncodedImage placeholder, String file, String url, URLImage.ImageAdapter adapter) Creates an image the will be downloaded on the fly as necessarystatic URLImagecreateToStorage(EncodedImage placeholder, String storageFile, String url) Creates an image the will be downloaded on the fly as necessary with RESIZE_SCALE_TO_FILL as the default behaviorstatic URLImagecreateToStorage(EncodedImage placeholder, String storageFile, String url, URLImage.ImageAdapter adapter) Creates an image the will be downloaded on the fly as necessaryvoidfetch()Images are normally fetched from storage or network only as needed, however if the download must start before the image is drawn this method can be invoked.static URLImage.ErrorCallbackThe exception handler is used for callbacks in case of an errorbyte[]Returns the byte array data backing the image allowing the image to be stored and discarded completely from RAM.protected ImageReturns the actual image represented by the encoded image, this image will be cached in a weak/soft reference internally.booleanReturns true if this is an animated imagevoidlock()Block this method from external callers as it might break the functionalitybooleanNew label optimizations don't invoke drawImage and instead just pass the native image directly to the underlying renderer.static voidsetExceptionHandler(URLImage.ErrorCallback aExceptionHandler) The exception handler is used for callbacks in case of an errorvoidunlock()Block this method from external callers as it might break the functionalityMethods inherited from class EncodedImage
asyncLock, create, create, create, create, create, createFromImage, createFromRGB, createMulti, drawImage, drawImage, getGraphics, getHeight, getImage, getWidth, isLocked, isOpaque, modifyAlpha, modifyAlpha, resetCache, rotate, scale, scaled, scaledEncoded, scaledHeight, scaledSmallerRatio, scaledWidth, subImage, toRGBModifier and TypeMethodDescriptionvoidAsync lock is the equivalent of a lock operation, however it uses the given image as the hard cache and performs the actual image loading asynchronously.static EncodedImagecreate(byte[] data) Creates an image from the given byte arraystatic EncodedImagecreate(byte[] data, int width, int height, boolean opacity) Creates an image from the given byte array with the variables set appropriately.static EncodedImageCreates an image from the input streamstatic EncodedImagecreate(InputStream i, int size) Creates an image from the input stream, this version of the method is somewhat faster than the version that doesn't accept sizestatic EncodedImageCreates an image from the input streamstatic EncodedImagecreateFromImage(Image i, boolean jpeg) Converts an image to encoded imagestatic ImagecreateFromRGB(int[] argb, int width, int height, boolean jpeg) Tries to create an encoded image from RGB which is more efficient, however if this fails it falls back to regular RGB image.static EncodedImagecreateMulti(int[] dpis, byte[][] data) Creates an encoded image that acts as a multi-image, DO NOT USE THIS METHOD.protected voidCallback invoked internally by Codename One to draw the image/frame onto the display.protected voidCallback invoked internally by Codename One to draw the image/frame onto the display.If this is a mutable image a graphics object allowing us to draw on it is returned.intReturns the height of the imagegetImage()Returns the platform specific image implementation, warning the implementation class can change between revisions of Codename One and platforms.intgetWidth()Returns the width of the imagebooleanisLocked()Returns true if the image is lockedbooleanisOpaque()Indicates whether this image is opaque or notmodifyAlpha(byte alpha) Creates a new image instance with the alpha channel of opaque/translucent pixels within the image using the new alpha value.modifyAlpha(byte alpha, int removeColor) Creates a new image instance with the alpha channel of opaque/translucent pixels within the image using the new alpha value.protected voidA subclass might choose to load asynchroniously and reset the cache when the image is ready.rotate(int degrees) Returns an instance of this image rotated by the given number of degrees.voidscale(int width, int height) Scale the image to the given width and height, this is a fast algorithm that preserves translucent informationscaled(int width, int height) Returns a scaled version of this image image using the given width and height, this is a fast algorithm that preserves translucent information.scaledEncoded(int width, int height) Performs scaling using ImageIO to generate an encoded ImagescaledHeight(int height) Scales the image to the given height while updating the width based on the aspect ratio of the heightscaledSmallerRatio(int width, int height) Scales the image while maintaining the aspect ratio to the smaller size imagescaledWidth(int width) Scales the image to the given width while updating the height based on the aspect ratio of the widthsubImage(int x, int y, int width, int height, boolean processAlpha) Extracts a subimage from the given image allowing us to breakdown a single large image into multiple smaller images in RAM, this actually creates a standalone version of the image for use.voidExtracts data from this image into the given RGBImageMethods inherited from class Image
addActionListener, applyMask, applyMask, applyMaskAutoScale, createImage, createImage, createImage, createImage, createImage, createImage, createImage, createIndexed, createMask, createSVG, dispose, exifRotation, exifRotation, exifRotation, fill, fireChangedEvent, flipHorizontally, flipVertically, getExifOrientationTag, getExifOrientationTag, getImageName, getRGB, getRGB, getRGBCached, getSVGDocument, isAlphaMutableImageSupported, isJPEG, isPNG, isSVG, isSVGSupported, mirror, modifyAlphaWithTranslucency, removeActionListener, rotate180Degrees, rotate270Degrees, rotate90Degrees, scaledLargerRatio, setImageNameModifier and TypeMethodDescriptionvoidAdds ActionListener to receive action events form this source.Applies the given alpha mask onto this image and returns the resulting image see the createMask method for indication on how to convert an image into an alpha mask.Applies the given alpha mask onto this image and returns the resulting image see the createMask method for indication on how to convert an image into an alpha mask.applyMaskAutoScale(Object mask) Applies the given alpha mask onto this image and returns the resulting image see the createMask method for indication on how to convert an image into an alpha mask.static ImagecreateImage(byte[] bytes, int offset, int len) creates an image from a given byte array datastatic ImagecreateImage(int[] rgb, int width, int height) creates an image from an RGB imagestatic ImagecreateImage(int width, int height) Creates a white opaque mutable image that may be manipulated using#getGraphics().static ImagecreateImage(int width, int height, int fillColor) Creates a mutable image that may be manipulated using#getGraphics().static ImagecreateImage(InputStream stream) creates an image from an InputStreamstatic ImagecreateImage(Object nativeImage) creates an image from the given native image (e.g. MIDP image object)static ImagecreateImage(String path) Creates an image from a path.static ImagecreateIndexed(int width, int height, int[] palette, byte[] data) Creates an indexed image with byte data this method may return a native indexed image rather than an instance of the IndexedImage classCreates a mask from the given image, a mask can be used to apply an arbitrary alpha channel to any image.static ImageCreates an SVG Image from the given byte array data and the base URL, this method will throw an exception if SVG is unsupported.voiddispose()DO NOT CALL THIS METHOD UNLESS YOU KNOW WHAT YOU ARE DOING, IT WILL CAUSE PLATFORM SPECIFC CRASHES OTHERWISE! Images dispose automatically for most cases except for very rare special cases.static ImageexifRotation(String capturedImage) The main use case of this method is the automatic rotation and flipping of an image returned from the camera or from the gallery, preserving the original format (jpeg or png); it detects the Exif Orientation Tag, if available (all the possible Exif Orientation Tag values are supported); transparency is not preserved.static ImageexifRotation(String capturedImage, String rotatedImage) The main use case of this method is the automatic rotation and flipping of an image returned from the camera or from the gallery, preserving the original format (jpeg or png); it detects the Exif Orientation Tag, if available (all the possible Exif Orientation Tag values are supported); transparency is not preserved.static ImageexifRotation(String capturedImage, String rotatedImage, int maxSize) The main use case of this method is the automatic rotation and flipping of an image returned from the camera or from the gallery, preserving the original format (jpeg or png); it detects the Exif Orientation Tag, if available (all the possible Exif Orientation Tag values are supported); transparency is not preserved.fill(int width, int height) Resizes/crops the image so that its center fills the given dimensions.voidflipHorizontally(boolean maintainOpacity) Flips this image on the horizontal axisflipVertically(boolean maintainOpacity) Flips this image on the vertical axisstatic intGets the EXIF orientation tag of an image, if it's available.static intgetExifOrientationTag(String path) Gets the EXIF orientation tag of an image if it's available.The name of the image is set for some images mostly to ease the debugging of Codename One applicationint[]getRGB()Returns the content of this image as a newly created ARGB array.voidgetRGB(int[] rgbData) Returns the content of this image in the supplied ARGB array.int[]Returns the content of this image as a newly created ARGB array or a cached instance if possible.Returns a platform specific DOM object that can be manipulated by the user to change the SVG Imagestatic booleanReturns true if mutable images support alpha transparencystatic booleanisJPEG(InputStream inputStream) Very fast method to detect if the given inputStream is a JPEG image (according to its guessed mime type)static booleanisPNG(InputStream inputStream) Very fast method to detect if the given inputStream is a PNG image (according to its guessed mime type)booleanisSVG()Indicates if this image represents an SVG file or a bitmap filestatic booleanIndicates whether the underlying platform supports creating an SVG Imagemirror()Creates a mirror image for the given image which is useful for some RTL scenarios.modifyAlphaWithTranslucency(byte alpha) Creates a new image instance with the alpha channel of opaque pixels within the image using the new alpha value.voidRemoves ActionListener so that it will no longer receive events from this source.rotate180Degrees(boolean maintainOpacity) Rotates the image by 180 degreesrotate270Degrees(boolean maintainOpacity) Rotates the image by 270 degrees while changing the ratio of the picturerotate90Degrees(boolean maintainOpacity) Rotates this image by 90 degrees while changing the ratio of the picturescaledLargerRatio(int width, int height) Scales the image while maintaining the aspect ratio to the larger size imagevoidsetImageName(String imageName) The name of the image is set for some images mostly to ease the debugging of Codename One applicationMethods inherited from class Object
clone, equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitModifier and TypeMethodDescriptionprotected Objectclone()booleanIndicates whether some other object is "equal to" this one.final ClassgetClass()Returns the runtime class of an object.inthashCode()Returns a hash code value for the object.final voidnotify()Wakes up a single thread that is waiting on this object's monitor.final voidWakes up all threads that are waiting on this object's monitor.toString()Returns a string representation of the object.final voidwait()Causes current thread to wait until another thread invokes the method or the method for this object.final voidwait(long timeout) Causes current thread to wait until either another thread invokes the method or the method for this object, or a specified amount of time has elapsed.final voidwait(long timeout, int nanos) Causes current thread to wait until another thread invokes the method or the method for this object, or some other thread interrupts the current thread, or a certain amount of real time has elapsed.
-
Field Details
-
FLAG_RESIZE_FAIL
public static final int FLAG_RESIZE_FAILFlag used byjava.lang.String, com.codename1.ui.Image, int). Equivalent to#RESIZE_FAIL- See Also:
-
RESIZE_FAIL
Will fail if the downloaded image has a different size from the placeholder image -
FLAG_RESIZE_SCALE
public static final int FLAG_RESIZE_SCALEFlag used byjava.lang.String, com.codename1.ui.Image, int)Equivalent to#RESIZE_SCALE.- See Also:
-
RESIZE_SCALE
Scales the image to match the size of the new image exactly -
FLAG_RESIZE_SCALE_TO_FILL
public static final int FLAG_RESIZE_SCALE_TO_FILLFlag used byjava.lang.String, com.codename1.ui.Image, int). Equivalent to#RESIZE_SCALE_TO_FILL.- See Also:
-
RESIZE_SCALE_TO_FILL
Scales the image to match to fill the area while preserving aspect ratio
-
-
Method Details
-
getExceptionHandler
The exception handler is used for callbacks in case of an error
Returns
the exceptionHandler
-
setExceptionHandler
The exception handler is used for callbacks in case of an error
Parameters
aExceptionHandler: the exceptionHandler to set
-
createMaskAdapter
Creates an adapter that uses an image as a Mask, this is roughly the same as SCALE_TO_FILL with the exception that a mask will be applied later on. This adapter requires that the resulting image be in the size of the imageMask!
See the sample usage code below that implements a circular image masked downloader:
Image roundMask = Image.createImage(placeholder.getWidth(), placeholder.getHeight(), 0xff000000); Graphics gr = roundMask.getGraphics(); gr.setColor(0xffffff); gr.fillArc(0, 0, placeholder.getWidth(), placeholder.getHeight(), 0, 360); URLImage.ImageAdapter ada = URLImage.createMaskAdapter(roundMask); Image i = URLImage.createToStorage(placeholder, "fileNameInStorage", "http://xxx/myurl.jpg", ada);Parameters
imageMask: @param imageMask the mask image see the createMask() method of image for details of what a mask is, it will be used as the reference size for the image and resulting images must be of the same size!
Returns
the adapter
-
createMaskAdapter
-
createToStorage
Creates an image the will be downloaded on the fly as necessary with RESIZE_SCALE_TO_FILL as the default behavior
Parameters
-
placeholder: @param placeholder the image placeholder is shown as the image is loading/downloading and serves as the guideline to the size of the downloaded image. -
storageFile: the file in storage to which the image will be stored -
url: the url from which the image is fetched
Returns
a URLImage that will initialy just delegate to the placeholder
-
-
createToStorage
public static URLImage createToStorage(EncodedImage placeholder, String storageFile, String url, URLImage.ImageAdapter adapter) Creates an image the will be downloaded on the fly as necessary
Parameters
-
placeholder: @param placeholder the image placeholder is shown as the image is loading/downloading and serves as the guideline to the size of the downloaded image. -
storageFile: the file in storage to which the image will be stored -
url: the url from which the image is fetched -
adapter: @param adapter the adapter used to adapt the image into place, it should scale the image if necessary
Returns
a URLImage that will initialy just delegate to the placeholder
-
-
createToFileSystem
public static URLImage createToFileSystem(EncodedImage placeholder, String file, String url, URLImage.ImageAdapter adapter) Creates an image the will be downloaded on the fly as necessary
Parameters
-
placeholder: @param placeholder the image placeholder is shown as the image is loading/downloading and serves as the guideline to the size of the downloaded image. -
file: the file in the file system to which the image will be stored -
url: the url from which the image is fetched -
adapter: @param adapter the adapter used to adapt the image into place, it should scale the image if necessary
Returns
a URLImage that will initialy just delegate to the placeholder
-
-
createCachedImage
public static Image createCachedImage(String imageName, String url, Image placeholder, int resizeRule) Creates an image that will be downloaded on the fly as necessary. On platforms that support a native image cache (e.g. Javascript), the image will be loaded directly from the native cache (i.e. it defers to the platform to handle all caching considerations. On platforms that don't have a native image cache but do have a caches directory
FileSystemStorage#hasCachesDir(), this will calljava.lang.String, java.lang.String, com.codename1.ui.URLImage.ImageAdapter)with a file location in the caches directory. In all other cases, this will calljava.lang.String, java.lang.String).Parameters
-
imageName: The name of the image. -
url: the URL from which the image is fetched -
placeholder: @param placeholder the image placeholder is shown as the image is loading/downloading and serves as the guideline to the size of the downloaded image. -
resizeRule: One of#FLAG_RESIZE_FAIL,#FLAG_RESIZE_SCALE, or#FLAG_RESIZE_SCALE_TO_FILL.
Returns
a Image that will initially just delegate to the placeholder
-
-
fetch
public void fetch()Images are normally fetched from storage or network only as needed, however if the download must start before the image is drawn this method can be invoked. Notice that "immediately" doesn't mean synchronously, it just means that the image will be added to the queue right away but probably won't be available by the time the method completes. -
getInternal
Returns the actual image represented by the encoded image, this image will be cached in a weak/soft reference internally. This method is useful to detect when the system actually created an image instance. You shouldn't invoke this method manually!
Returns
drawable image instance
- Overrides:
getInternalin classEncodedImage
-
requiresDrawImage
public boolean requiresDrawImage()Description copied from class:ImageNew label optimizations don't invoke drawImage and instead just pass the native image directly to the underlying renderer. This is problematic for some image types specifically timeline & FontImage and this method allows these classes to indicate that they need that legacy behavior of calling drawImage.
Returns
true if a drawImage call is a required
- Overrides:
requiresDrawImagein classImage
-
getImageData
public byte[] getImageData()Returns the byte array data backing the image allowing the image to be stored and discarded completely from RAM.
Returns
byte array used to create the image, e.g. encoded PNG, JPEG etc.
- Overrides:
getImageDatain classEncodedImage
-
animate
-
lock
public void lock()Block this method from external callers as it might break the functionality- Overrides:
lockin classEncodedImage
-
unlock
public void unlock()Block this method from external callers as it might break the functionality- Overrides:
unlockin classEncodedImage
-
isAnimation
public boolean isAnimation()Returns true if this is an animated image
Returns
true if this image represents an animation
- Overrides:
isAnimationin classEncodedImage
-