Why not use an Integer as the cache key and calculate it as follows (assuming the zoomfactor is < 100, too):
int keyInt = (((pageNumber * 100 + withcount) * 100) +
heightcount) * 100 + zoomfactor;
Integer key = Integer.valueOf(keyInt);
This will still allocate objects, but Integer.valueOf has a cache for some of them already, and the objects will be smaller. An auto-boxing will also use Integer.valueOf (which doesn't create a new instance for small numbers), just avoid new Integer().