1. 简介

XBM 是一种最简单的一种图像格式,不像其他图像格式那样最终存储的二进制数据,XBM 图像格式存的是 C 源码。XBM 格式基本只在 X Windows 系统上使用,只支持两种颜色。相较于 BMP 格式,XBM 格式更像是 BMP 图像在 Windows 下的 icon 文件。

【注】XBM 格式在 X Windows 环境外几乎很少用到。

2. 格式

2.1 详解

XBM 图像格式示例如下:

1
2
3
4
5
#define imagename_width 16
#define imagename_height 2
#define imagename_hot_x 1
#define imagename_hot_y 1
static unsigned char imagename_bits[] = {0x10, 0x10, 0x10, 0x10};

其中,imagename 为具体的 XBM 文件名;imagename_widthimagename_height 分别表示图像的宽度和高度;imagename_hot_ximagename_hot_y 分别表示 hotspot 的位置(hotspot 是用来表示光标的在图像中的绝对位置);最后的一维 imagename_bits 数组表示图像的像素信息,每个字节表示 88 个像素信息。图像的像素信息是按照从上到下、从左到右的顺序存储在 imagename_bits 数组中,如果图像的宽度不是 88 的整数倍,则每一行最后字节中额外的比特数将不被使用。

  • XBM 图像中像素数据实际占用的空间大小为:

bytes=height×width+78\begin{array}{c} bytes = height \times \frac{width + 7}{8} \end{array}

  • XBM 图像是二值图像,不包含色彩信息。比特值 00 表示和背景色相同,比特值 11 表示和前景色相同。

2.2 注意事项

虽然 XBM 本质上是符合 C 语言语法的源文件,但在写 XBM 文件时,需要注意以下事项,否则可能导致 XBM 文件无法被软件正常读取显示:

  • 不要使用空白行。
  • 不要使用注释。
  • 按照格式详解中的给出的顺序书写各个字段。
  • #define 定义的数值需要写成十进制格式。
  • #define 之间不能有空格。
  • 像素数据需要使用十六进制书写。