o
    e*                     @   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   >/var/www/html/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rd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 )zConvert 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rtd| dd  } tdd	||dd}||  } |||| fS )N6   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 zInsert 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-