As a user you don't need to care about B4PObject in an Object declaration. B4PObject(x) is needed to declare the object that it can interface between B4PPC and external libraries. The number depends on the type of object and the kind of data to transfer.
In your example: drawer.New2 (ImageList1.Item(0), B4PObject(5))
is used to declare the Drawer object.
Declarations with another number like:
drawer.New2 (ImageList1.Item(0), B4PObject(4)) or
drawer.New2 (ImageList1.Item(0), B4PObject(3)) don't exist.
If you intend to use ImageLib, I would advise you to use the ImageLibEx instead of. ImageLibEx is not an extension to ImageLib but contains all ImageLib functions, but can do much more.
Best regards.