if (not MapReaded) and (Header.MapLength>0) then begin Position := Position + Header.MapLength; end; //如果调色板长度不为0,而又未正确读取相关信息时,跳过这一段数据
case Header.Depth of 8: begin if Header.RasType = RT_BYTE_ENCODED then begin //ENCODE //关于RLE压缩的编码解码请自行查阅资料 RasError(''''不支持压缩格式!''''); end else begin for Y := 0 to Height-1 do begin Row8:=ScanLine[Y]; ReadBuffer(Row8^,Width); if (Width mod 2)=1 then begin Position := Position + 1; end; end; end; end;{end of 8Bit} 24: begin case Header.RasType of RT_OLD, RT_STANDARD: begin for Y := 0 to Height-1 do begin Row24:=ScanLine[Y]; ReadBuffer(Row24^,Width*3); if (Width mod 2)=1 then begin Position := Position + 1; end; end; end; RT_BYTE_ENCODED: begin //ENCODE //关于RLE压缩的编码解码请自行查阅资料 RasError(''''不支持压缩格式!''''); end; RT_FORMAT_RGB: begin for Y := 0 to Height-1 do begin Row24:=ScanLine[Y]; ReadBuffer(Row24^,Width*3); for I := 0 to Width-1 do begin ColorByte := Row24^.rgbtRed; Row24^.rgbtRed := Row24^.rgbtBlue; Row24^.rgbtBlue := ColorByte; Inc(Row24); end; //当为RT_FORMAT_RGB格式时,按RGB获取数据,这里需要交换R和B的值 if (Width mod 2)=1 then begin Position := Position + 1; end; end; end;{end of RT_FORMAT_RGB} else RasError(''''不支持的文件格式!''''); end; end;{end of 24Bit} 32: begin case Header.RasType of RT_OLD, RT_STANDARD: begin for Y := 0 to Height-1 do begin Row32:=ScanLine[Y]; ReadBuffer(Row32^,Width*4); for I := 0 to Width-1 do begin ColorByte := Row32^.rgbReserved; Row32^.rgbReserved := Row32^.rgbBlue; Row32^.rgbBlue := Row32^.rgbGreen; Row32^.rgbGreen := Row32^.rgbRed; Row32^.rgbRed := ColorByte; Inc(Row32); end; //32位色时,需要调整读取后数据的顺序 end; end; RT_BYTE_ENCODED: begin //ENCODE //关于RLE压缩的编码解码请自行查阅资料 RasError(''''不支持压缩格式!''''); end; RT_FORMAT_RGB: begin For Y := 0 to Height-1 do begin Row32:=ScanLine[Y]; ReadBuffer(Row32^,Width*4); for I := 0 to Width-1 do begin ColorByte := Row32^.rgbBlue; Row32^.rgbBlue := Row32^.rgbReserved; Row32^.rgbReserved := ColorByte; ColorByte := Row32^.rgbGreen; Row32^.rgbGreen := Row32^.rgbRed; Row32^.rgbRed := ColorByte; Inc(Row32); end;