Device-dependent image descriptor fields
I'm afraid, it's hard to use. To create a size, I need to do something like

new DevicePreDefinedImageSize(
    DevicePreDefinedImageSizeMode.REAL_SIZE,
    number)


I don't think I could ever remember this. What about:

Size.newRealSize(number)


This can be done easily, all you need are three static methods. You can otherwise keep you classes as they are.



@Override
public int getDownSampleFactor() {
    throw new UnknownError("????");
}


This is a real pain. I can see that there's no downSampleFactor, but throwing four question marks isn't really helpful. I'd return 0. Though it may hide errors, it can make it easier to use.

Or, when you're defining so many classes, what about making them so that the unwanted method doesn't really exist? Declare it only where it makes sense.



Personally I wouldn't do six classes for this.