In addition to setting the VALUE of a button widget to a text string, you can use a bitmap image as the label for the button. To us a bitmap image, set VALUE to one of the following:
- The path to a bitmap image file, if the BITMAP keyword is also specified.
- An n x m byte array converted to a bitmap byte array using the CVTTOBM function, which displays as a black-and-white bitmap image.
- An n x m x 3 byte array, which displays as a 24-bit color bitmap image.
The following sections describe the process of creating bitmap files, black-and-white arrays, and color arrays for use as bitmap button labels.
Creating Bitmap Files for Buttons
You can produce appropriate bitmap files (for use with the BITMAP keyword to WIDGET_BUTTON) using any bitmap editor available on your operating system. Be sure to save the file as a .bmp file.
Transparent Bitmaps
For 16- and 256-color bitmaps included using the BITMAP keyword, IDL uses the color of the pixel in the lower left corner as the transparent color. All pixels of this color become transparent, allowing the button color to show through. This allows you to use bitmaps that do not appear to be rectangular. For 24-bit bitmaps, there is no transparent pixel. Note that this functionality is currently only available on Windows platforms.
If you have a 16- or 256-color rectangular bitmap and you want to maintain the rectangular shape of a bitmap, you can either draw a border of a different color around the bitmap (making sure that the lower left pixel is a different color from the background you want to maintain) or save the bitmap as a 24-bit (TrueColor) image. If your bitmap also contains text, make sure the border you draw is a different color than the text, otherwise the text color will become transparent.
Note on 8-bit X Windows Displays
Displaying bitmap buttons on 8-bit color X Windows displays may require using additional X colormap colors to allocate colors used by the bitmaps. If the required colormap colors are not available, the button bitmap may not display properly.
Creating Black-and-White Bitmap Arrays for Buttons
You can produce appropriate black-and-white bitmap arrays in IDL in the following ways:
- Create a black and white bitmap using an external bitmap editor, and read it into an IDL byte array using the appropriate procedure (READ_BMP, READ_JPEG, etc.) and convert the byte array to a bitmap byte array using the CVTTOBM function.
- On an X-Window system, use the X11 bitmap utility to create a black and white bitmap byte array and read it in to IDL using the READ_X11_BITMAP routine.
- Create a black and white bitmap using the XBM_EDIT procedure. This procedure offers several alternatives for the form of the final bitmap.
- Create an n x m byte array using the BYTARR function and modify array elements using array operations. Use CVTTOBM to convert the array to a bitmap byte array.
Creating Color Bitmap Arrays for Buttons
You can produce appropriate color bitmap arrays in IDL in the following ways:
- Create a 24-bit color image using an external bitmap editor, and read it into an IDL byte array using the appropriate procedure (READ_BMP, READ_JPEG, etc.). Remember that the image array must be interleaved by plane (n x m 3), with the planes in the order red, green, blue. Note that image files created by image editors are often interleaved by pixel rather than by plane; use the TRANSPOSE function to reformat the array.
For example, if you read a 24-bit color image into an array using the READ_BMP function, the resulting array will be interleaved by pixel (with dimensions 3 x n x m), with planes in the order blue, green, red. To create an array in the proper format for use as a button bitmap, use the following IDL commands:
button_image = READ_BMP('bitmap_file.bmp', /RGB)
button_image = TRANSPOSE(button_image, [1,2,0])
...
button = WIDGET_BUTTON(base, VALUE=button_image)
Here, the RGB keyword to READ_BMP reorders the color planes to be in the order red, green, blue; the call to TRANSPOSE puts the array in the proper format for use in a bitmap button.
- Create an n x m x 3 byte array using the BYTARR function and modify the array elements using array operations.
Although IDL places no restriction on the size of bitmap allowed, the various toolkits may prefer certain sizes.