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 ?

Reply via email to