文件解析器将扫描行数据构建为定义每个像素的连续的位流。每个像素被打包成字节数组,如果数据以十六进制或二进制数字写出,则可以从左到右按顺序读取像素。也就是说,对于4位/像素格式,第一像素存储在第一字节(位7,位6,位5和位4)的高位中,并且存储第二像素在该字节的低位(位3,位2,位1和位0)中。因此,如果4位/像素扫描线的前8个像素的十六进制值为0,2,C,9,A,4,3和F,扫描线数据的前四个字节将为02,C9,A4和3F。
如果解析器为图像提供调色板,则每个像素的数据将被解释为调色板中的索引。如果图像不存在调色板,则每个像素的位指定一个真彩色(仅24位)或灰度值。对于24位颜色,扫描线的每3字节表示单个像素的红色,绿色和蓝色的强度。
当扫描线已经完全指定时,解析器必须使用SO_SCANLINEBREAK值调用SOPutBreak,除了位图的最后一行。位图的最后一行必须以SO_SECTIONBREAK或SO_EOFBREAK类型的中断结尾,以适用者为准。
以下示例说明了在最简单的可能情况下使用位图功能:具有扫描线数据的解析器存储在一个瓦片宽度上,并且具有与解析器相同的格式来提供它,因此数据在读取后不需要额外的处理。此示例也不检查EOF或读错误。
WORD wBytesRead;
WORD wBufSize = Proc.ScanLineBufSize;
do
{
...
xread( hFile, Proc.ScanLineBuf, wBufSize, &wBytesRead );
SOPutScanLineData( Proc.ScanLineBuf, hProc );
...
} while( SOPutBreak( SO_SCANLINEBREAK, 0, hProc ) == SO_CONTINUE );