Dear Wiki user,

You have subscribed to a wiki page or wiki category on "Clerezza Wiki" for 
change notification.

The "ImageReaderService" page has been changed by DanielSpicar:
http://wiki.apache.org/clerezza/ImageReaderService

Comment:
added ImageReaderService documentation

New page:
= Image Reader Service =

DISCLAIMER: This service in not yet part of a Clerezza release. See also 
[[https://issues.apache.org/jira/browse/CLEREZZA-716|CLEREZZA-716]].

== Purpose ==
By default the Clerezza Platform uses javax.imageio to read image data. However 
there are at least two scenarios when users may want to change that.

1. When reading images that ImageIO does not support (different image formats 
or image formats that may be considered corrupt by ImageIO)
2. When wanting to improve image processing performance.

A major difficulty in resolving these problems is that normally there is no way 
other than changing source code and recompiling to make existing services use a 
different method of reading images. With the introduction of the 
ImageReaderService all Clerezza Platform components have been changed to use 
the ImageReaderService when obtaining BufferedImages. This service dynamically 
looks up services that implement the ImageReader interface in the OSGi SCR 
(Service Component Runtime) and provides the service that is registered with 
the highest service.ranking property. By default the Clerezza Platform has only 
one ImageReader service registered that has a service ranking of 0 and reads 
images using javax.imageio. The ImageReaderService implement the ImageReader 
interface as well but delegates all calls to the highest ranking registered 
ImageReader.

== How to use the ImageReaderService ==

You can bind the ImageReaderService in an OSGi component by referencing it:

{{{#!java
@Reference
private ImageReaderService imageReaderService;
}}}

Then you can either call the getImageReader() method to obtain the highest 
ranking ImageReader registered or use one of the getBufferedImage methods that 
will delegate to the highest ranking ImageReader.

== How to register a custom ImageReader ==

To register a custom ImageReader with service ranking of 1 (default is 0) you 
need to create a bundle providing an ImageReader service as follows:

{{{#!java
@Component
@Service(ImageReader.class)
@Property(name=Constants.SERVICE_RANKING, intValue=1)
public class BetterImageReader implements ImageReader {
    // ...
}
}}}

When the component metaType is declared true and the service.ranking property 
is declared non-private, the service.ranking can by dynamically configured at 
runtime in the Felix Web Console.

{{{#!java
@Component(metatype=true)
@Service(ImageReader.class)
@Property(name=Constants.SERVICE_RANKING, intValue=1, propertyPrivate=false)
public class BetterImageReader implements ImageReader {
    // ...
}
}}}

Reply via email to