a :jgL @sddlmZddlZddlZddlmZddlmZmZddl m Z ddl m Z dd d d d Z d d dddddddZGdddejZdddddddZGdddejZedeeejee eejeeejd eejgd!dS)") annotationsN)IO)Image ImageFile)i16be)o8bytesbool)prefixreturncCst|dkot|dkS)N)leni16)r rrrrr!r5r)rr z%Unsupported number of bytes per pixelr#rrrrr >rr z(incorrect number of bands in SGI write: z vs asciiignorez>hz>Hz>lZ4sZ79sr2Z404srr%flush)r.r(Z encoderinfogetr/rZgetbandsospathsplitextbasename isinstancestrencodewritestructpackrr,tobyteshasattrrK)rEr&rFr3infor5r;Z magic_numberZrledimxyzZpinminZpinmaxZimg_nameZcolormapr:channelrrr_savesd          r_c@s eZdZdZdddddZdS) SGI16DecoderTz$bytes | Image.SupportsArrayInterfaceztuple[int, int])bufferr c Cs|jdusJ|jdusJ|j\}}}|jj|jj}t|j}|jdt |D]J}t d|jj|jjf}| |j d|dd|||j|j|qVdS)Nrrr r%r)r#r)fdrEargsstater7r8rr.seekrangernew frombytesr'Zputband) r1rar:Zstrider;r<r9Zbandr^rrrdecodes    zSGI16Decoder.decodeN)r@rArBZ _pulls_fdrirrrrr`sr`r$z image/sgi)z.bwz.rgbz.rgbaz.sgi) __future__rrMrUtypingrr rr_binaryrrrrr)rr_Z PyDecoderr`Zregister_decoderZ register_openrCZ register_saveZ register_mimeZregister_extensionsrrrrs0    UM