I want to build a DynamicImageResource which can scale internal (packaged)
images (with name : {index}.gif ) .
In getImageData() , I try to load a truly existing image , but cannot
getResource() , it returns null !
Here is my code :
public class ScaledImageResource extends DynamicImageResource
{
private ThreadLocal<Integer> index = new ThreadLocal<Integer>();
private ThreadLocal<Integer> width = new ThreadLocal<Integer>();
private ThreadLocal<Integer> height = new ThreadLocal<Integer>();
@Override
public IResourceStream getResourceStream()
{
ValueMap map = getParameters();
index .set(map.getAsInteger("index" , 1));
width .set(map.getAsInteger("width" , 50));
height.set(map.getAsInteger("height", 50));
return super.getResourceStream();
}
@Override
protected byte[] getImageData()
{
ResourceReference imageResource = new ResourceReference(MyPage.class ,
"icons/byIndex/"+index.get()+".gif");
http://foobar.com/app/resources/foo.bar.MyPage/icons/byIndex/1.gif does
exist !
try
{
System.out.println("imageResource.getResource() = " +
imageResource.getResource()); // returns NULL
InputStream is =
imageResource.getResource().getResourceStream().getInputStream();
BufferedImage bufferedImage = ImageIO.read(is);
BufferedImage scaledImage = BufferedImageTools.getImage(bufferedImage,
width.get() , height.get());
byte[] bytes = null;
//scale image , build bytes , skipped here.
return bytes;
}
catch (Exception e)
{
}
return null;
}
}
And in Application's init():
getSharedResources().add(IMG_KEY, new ScaledImageResource());
mountSharedResource("/scaledImage", new
ResourceReference(IMG_KEY).getSharedResourceKey());
Note , the image file does exist there ,
and http://foobar.com/app/resources/foo.bar.MyPage/icons/byIndex/1.gif does
browsable !
But why cannot I getResource() of the imageResource ?