o
    8"<f²*  ã                   @   sx   d dl mZ ddlmZmZ dd„ Zdd„ Zdd	„ ZG d
d„ deƒZdd„ Z	dd„ Z
G dd„ deƒZG dd„ deƒZdS )é   )Ú
BiffRecordé    )ÚpackÚunpackc                 C   ó
   |   |¡S ©N)Ú	col_width)ÚsheetÚcol© r   úB/var/www/html/kck/venv/lib/python3.10/site-packages/xlwt/Bitmap.pyÚ	_size_col   ó   
r   c                 C   r   r   )Ú
row_height)r	   Úrowr   r   r   Ú	_size_row   r   r   c                 C   s   |t | |ƒkr|t | |ƒ8 }|d7 }|t | |ƒks|t| |ƒkr2|t| |ƒ8 }|d7 }|t| |ƒks |}|}|| d }|| d }|t | |ƒkr[|t | |ƒ8 }|d7 }|t | |ƒksI|t| |ƒkrt|t| |ƒ8 }|d7 }|t| |ƒksbt | |ƒdkst | |ƒdkst| |ƒdkst| |ƒdkr’dS tt|ƒt | |ƒ d ƒ}tt|ƒt| |ƒ d ƒ}tt|ƒt | |ƒ d ƒ}	tt|ƒt| |ƒ d ƒ}
||||||	||
fS )aú  Calculate the vertices that define the position of the image as required by
    the OBJ record.

             +------------+------------+
             |     A      |      B     |
       +-----+------------+------------+
       |     |(x1,y1)     |            |
       |  1  |(A1)._______|______      |
       |     |    |              |     |
       |     |    |              |     |
       +-----+----|    BITMAP    |-----+
       |     |    |              |     |
       |  2  |    |______________.     |
       |     |            |        (B2)|
       |     |            |     (x2,y2)|
       +---- +------------+------------+

    Example of a bitmap that covers some of the area from cell A1 to cell B2.

    Based on the width and height of the bitmap we need to calculate 8 vars:
        col_start, row_start, col_end, row_end, x1, y1, x2, y2.
    The width and height of the cells are also variable and have to be taken into
    account.
    The values of col_start and row_start are passed in from the calling
    function. The values of col_end and row_end are calculated by subtracting
    the width and height of the bitmap from the width and height of the
    underlying cells.
    The vertices are expressed as a percentage of the underlying cell width as
    follows (rhs values are in pixels):

           x1 = X / W *1024
           y1 = Y / H *256
           x2 = (X-1) / W *1024
           y2 = (Y-1) / H *256

           Where:  X is distance from the left side of the underlying cell
                   Y is distance from the top of the underlying cell
                   W is the width of the cell
                   H is the height of the cell

    Note: the SDK incorrectly states that the height should be expressed as a
    percentage of 1024.

    col_start  - Col containing upper left corner of object
    row_start  - Row containing top left corner of object
    x1  - Distance to left side of object
    y1  - Distance to top of object
    width  - Width of image frame
    height  - Height of image frame

    r   r   Ni   é   )r   r   ÚintÚfloat)r	   Ú	row_startÚ	col_startÚx1Úy1ÚwidthÚheightÚrow_endÚcol_endÚx2Úy2r   r   r   Ú_position_image   s8   5þþþþr   c                   @   s   e Zd ZdZdd„ ZdS )ÚObjBmpRecordé]   c	           3      C   s`  |j | }	|j| }
t||||||	|
ƒ}|\}}}}}}}}	 d}d}d}d}|}|}|}|}|}|}|}|}d} d}!d}"d}#d}$d}%d}&d}'d}(d})d}*d}+d},d}-d}.d}/d}0d}1td|ƒ}2|2td|ƒ7 }2|2td|ƒ7 }2|2td|ƒ7 }2|2td|ƒ7 }2|2td|ƒ7 }2|2td|ƒ7 }2|2td|ƒ7 }2|2td|ƒ7 }2|2td|ƒ7 }2|2td|ƒ7 }2|2td|ƒ7 }2|2td| ƒ7 }2|2td|!ƒ7 }2|2td|"ƒ7 }2|2td	|#ƒ7 }2|2td	|$ƒ7 }2|2td	|%ƒ7 }2|2td	|&ƒ7 }2|2td	|'ƒ7 }2|2td	|(ƒ7 }2|2td	|)ƒ7 }2|2td	|*ƒ7 }2|2td|+ƒ7 }2|2td|,ƒ7 }2|2td|-ƒ7 }2|2td|.ƒ7 }2|2td|/ƒ7 }2|2td|0ƒ7 }2|2td|1ƒ7 }2|2| _d S )
Nr   é   i  r   é	   éÿ   ú<Lz<Hz<B)r   r   r   r   Ú	_rec_data)3Úselfr   r
   r	   Úim_data_bmpÚxÚyÚscale_xÚscale_yr   r   Úcoordinatesr   r   r   r   r   r   r   r   ÚcObjÚOTÚidÚgrbitÚcolLÚdxLÚrwTÚdyTÚcolRÚdxRÚrwBÚdyBÚcbMacroÚ	Reserved1Ú	Reserved2ÚicvBackÚicvForeÚflsÚfAutoÚicvÚlnsÚlnwÚfAutoBÚfrsÚcfÚ	Reserved3Ú
cbPictFmlaÚ	Reserved4Úgrbit2Ú	Reserved5Údatar   r   r   Ú__init__n   s„   



zObjBmpRecord.__init__N)Ú__name__Ú
__module__Ú__qualname__Ú_REC_IDrM   r   r   r   r   r    k   s    r    c                 C   s@   t | dƒ}| ¡ }W d  ƒ t|ƒS 1 sw   Y  t|ƒS )z±Convert a 24 bit bitmap into the modified internal format used by Windows.
    This is described in BITMAPCOREHEADER and BITMAPCOREINFO structures in the
    MSDN library.

    ÚrbN)ÚopenÚreadÚ_process_bitmap_data)ÚbitmapÚfhrL   r   r   r   Ú_process_bitmap¼   s   

þýrX   c                 C   s^  t | ƒdkr
tdƒ‚| d d… dkrtdƒ‚| dd … } td| d d… ƒd }|d8 }|d	7 }| dd … } | d	d … } td
| d d… ƒ\}}| dd … } |dkrTtdƒ‚|dkr\tdƒ‚td| d d… ƒ\}}| dd … } |dkrutdƒ‚|dkr}tdƒ‚td| d d… ƒd }| dd … } |dkr–tdƒ‚| dd … } tdd	||ddƒ}||  } |||| fS )Né6   z#bitmap doesn't contain enough data.é   s   BMz4bitmap doesn't appear to to be a valid bitmap image.r%   é   r   é   z<LLr"   iÿÿ  z-bitmap: largest image width supported is 65k.z.bitmap: largest image height supported is 65k.z<HHé   z'bitmap isn't a 24bit true color bitmap.r   z/bitmap: only 1 plane supported in bitmap image.z2bitmap: compression not supported in bitmap image.é   z<LHHHH)ÚlenÚ	Exceptionr   r   )rL   Úsizer   r   ÚplanesÚbitcountÚcompressionÚheaderr   r   r   rU   È   s<   rU   c                   @   s    e Zd ZdZdd„ Zdd„ ZdS )ÚImRawDataBmpRecordé   c                 C   s.   t  | ¡ t|ƒ\| _| _| _}|  |¡ dS ©z¡Insert a 24bit bitmap image in a worksheet. The main record required is
        IMDATA but it must be proceeded by a OBJ record to define its position.

        N)r   rM   rU   r   r   ra   Ú_write_imdata)r'   rL   r   r   r   rM   ø   ó   
zImRawDataBmpRecord.__init__c                 C   s&   d}d}| j }td|||ƒ| | _d S )Nr#   r   z<HHL)ra   r   r&   )r'   rL   rF   ÚenvÚlcbr   r   r   ri     s   z ImRawDataBmpRecord._write_imdataN)rN   rO   rP   rQ   rM   ri   r   r   r   r   rf   õ   s    
rf   c                   @   s   e Zd Zdd„ ZdS )ÚImDataBmpRecordc                 C   s.   t  | ¡ t|ƒ\| _| _| _}|  |¡ dS rh   )r   rM   rX   r   r   ra   ri   )r'   ÚfilenamerL   r   r   r   rM   
  rj   zImDataBmpRecord.__init__N)rN   rO   rP   rM   r   r   r   r   rm   	  s    rm   N)ÚBIFFRecordsr   Ústructr   r   r   r   r   r    rX   rU   rf   rm   r   r   r   r   Ú<module>   s   XQ-