While this should work I would also like to point you to CELL.
Either as command for VERTEX2F or as parameter for VERTEX2II.
With this you can combine icons of the same size into one binary.
For a project I combined 9 54x20 images into one image and converted it to L8 format.
#define MEM_BUTTONS 0x00005500 /* buttons, 54x180 L8, 9 cells , 9720 / 0x25f8 */
#define HANDLE_BUTTONS 5
/* somwhere in init() */
EVE_cmd_inflate(MEM_BUTTONS, buttons, sizeof(buttons));
/* part of the static display-list that is injected with cmd_append */
EVE_cmd_dl(BITMAP_HANDLE(HANDLE_BUTTONS));
EVE_cmd_dl(BITMAP_SOURCE(MEM_BUTTONS));
EVE_cmd_dl(BITMAP_SIZE(EVE_NEAREST, EVE_BORDER, EVE_BORDER, 54, 20));
EVE_cmd_dl(BITMAP_LAYOUT(EVE_L8, 54, 20));
/* part of the dynamically generated display-list */
EVE_cmd_dl(DL_BEGIN | EVE_BITMAPS);
EVE_cmd_dl(BITMAP_HANDLE(HANDLE_BUTTONS));
EVE_cmd_dl(TAG(10));
EVE_cmd_dl(CELL(1));
EVE_cmd_dl(VERTEX2F(46, 110));
EVE_cmd_dl(TAG(11));
EVE_cmd_dl(CELL(2));
EVE_cmd_dl(VERTEX2F(46, 175));
This has two advantages, first is it uses less of RAM_G for odd-resolution images, that is anything not divisible by 8.
And then the packed binary is smaller so it uses less space in your controller and is transferred faster over SPI.
Well, and yes of course you can easily change the icon on the fly, even use this for animations.