Frankly, I haven't had the chance to look the class over in detail, but my impression is that there is too much being 'baked in' to this one class, and that much of it could be separated out into subclasses. Were I designing this, I would make image
an abstract
class and use subclasses for most of the actual implementation; an icon
subclass would in particular make sense, and move a lot of extraneous code out of the parent class.
David_50's suggestion of caching the images is a sensible one as well. I would use a priority queue (heap) and a Least Recently Used algorithm to track the cache; as new images get added, it would check to see if any images have a priority below some minimum level, and remove those from the heap, while each reference to an image already in the heap would brevet it back up to the top of the heap.
And oh yes, you have too many of you methods - as in all of them - in the class declaration. This is C++, not Java; you will want to move the majority of the implementation code into a separate source file.