î
úÙ Xz"  ã               @   sT  d  d l  m Z d  d l Z d  d l Z d  d l m Z e j e ƒ Z d Z	 e ƒ  Z
 e
 j e	 ƒ Gd d „  d e ƒ Z Gd d „  d e ƒ Z Gd	 d
 „  d
 e ƒ Z Gd d „  d e ƒ Z Gd d „  d e ƒ Z Gd d „  d e ƒ Z Gd d „  d e ƒ Z Gd d „  d e ƒ Z Gd d „  d e ƒ Z Gd d „  d e ƒ Z Gd d „  d e ƒ Z i e d 6e d 6e d 6e d 6e d 6e d  6e d! 6e d" 6e d# 6e d$ 6e d% 6e d& 6e d' 6e d( 6e d) 6e d* 6Z e j d+ k re e d, <e e d- <e e d. <e e d/ <e e d0 <n2 e e d, <e e d- <e e d. <e e d/ <e e d0 <d1 d2 d3 „ Z d S)4é    )Úprint_functionN)ÚFFIz`
struct Pixel_RGBA {
    unsigned char r,g,b,a;
};
struct Pixel_I16 {
    unsigned char l,r;
};
c               @   s[   e  Z d  Z d d d „ Z d d „  Z d d „  Z d d	 „  Z e Z e Z d
 d „  Z	 d S)ÚPyAccessFc             C   sš   t  | j j ƒ } | |  _ t j d | d ƒ |  _ t j d | d ƒ |  _ t j d | d ƒ |  _ | d |  _	 | d |  _
 | j |  _ |  j ƒ  d  S)Nzunsigned char **Úimage8zint **Úimage32ÚimageÚxsizeÚysize)ÚdictZimZunsafe_ptrsÚreadonlyÚffiÚcastr   r   r   r   r	   Z_imÚ
_post_init)ÚselfÚimgr   Úvals© r   úI/home/ubuntu/projects/ifolica/lib/python3.4/site-packages/PIL/PyAccess.pyÚ__init__0   s    	zPyAccess.__init__c             C   s   d  S)Nr   )r   r   r   r   r   A   s    zPyAccess._post_initc             C   s@   |  j  r t d ƒ ‚ n  |  j | ƒ \ } } |  j | | | ƒ S)a  
        Modifies the pixel at x,y. The color is given as a single
        numerical value for single band images, and a tuple for
        multi-band images

        :param xy: The pixel coordinate, given as (x, y).
        :param value: The pixel value.
        z%Attempt to putpixel a read only image)r   Ú
ValueErrorÚcheck_xyÚ	set_pixel)r   ÚxyÚcolorÚxÚyr   r   r   Ú__setitem__D   s    		zPyAccess.__setitem__c             C   s%   |  j  | ƒ \ } } |  j | | ƒ S)aI  
        Returns the pixel at x,y. The pixel is returned as a single
        value for single band images or a tuple for multiple band
        images

        :param xy: The pixel coordinate, given as (x, y).
        :returns: a pixel value for single band images, a tuple of
          pixel values for multiband images.
        )r   Ú	get_pixel)r   r   r   r   r   r   r   Ú__getitem__R   s    zPyAccess.__getitem__c             C   s]   | \ } } d | k o& |  j  k  n oG d | k oE |  j k  n sY t d ƒ ‚ n  | S)Nr   zpixel location out of range)r   r	   r   )r   r   r   r   r   r   r   r   c   s    >zPyAccess.check_xyN)
Ú__name__Ú
__module__Ú__qualname__r   r   r   r   ZputpixelZgetpixelr   r   r   r   r   r   .   s   r   c               @   s:   e  Z d  Z d Z d d „  Z d d „  Z d d „  Z d S)	Ú_PyAccess32_2z9 PA, LA, stored in first and last bytes of a 32 bit word c             O   s   t  j d |  j ƒ |  _ d  S)Nzstruct Pixel_RGBA **)r   r   r   Úpixels)r   ÚargsÚkwargsr   r   r   r   l   s    z_PyAccess32_2._post_initc             C   s!   |  j  | | } | j | j f S)N)r#   ÚrÚa)r   r   r   Úpixelr   r   r   r   o   s    z_PyAccess32_2.get_pixelc             C   sA   |  j  | | } t | d d ƒ | _ t | d d ƒ | _ d  S)Nr   éÿ   é   )r#   Úminr&   r'   )r   r   r   r   r(   r   r   r   r   s   s    z_PyAccess32_2.set_pixelN)r   r    r!   Ú__doc__r   r   r   r   r   r   r   r"   j   s   r"   c               @   s:   e  Z d  Z d Z d d „  Z d d „  Z d d „  Z d S)	Ú_PyAccess32_3zC RGB and friends, stored in the first three bytes of a 32 bit word c             O   s   t  j d |  j ƒ |  _ d  S)Nzstruct Pixel_RGBA **)r   r   r   r#   )r   r$   r%   r   r   r   r   }   s    z_PyAccess32_3._post_initc             C   s'   |  j  | | } | j | j | j f S)N)r#   r&   ÚgÚb)r   r   r   r(   r   r   r   r   €   s    z_PyAccess32_3.get_pixelc             C   sW   |  j  | | } t | d d ƒ | _ t | d d ƒ | _ t | d d ƒ | _ d  S)Nr   r)   r*   é   )r#   r+   r&   r.   r/   )r   r   r   r   r(   r   r   r   r   „   s    z_PyAccess32_3.set_pixelN)r   r    r!   r,   r   r   r   r   r   r   r   r-   z   s   r-   c               @   s:   e  Z d  Z d Z d d „  Z d d „  Z d d „  Z d S)	Ú_PyAccess32_4z( RGBA etc, all 4 bytes of a 32 bit word c             O   s   t  j d |  j ƒ |  _ d  S)Nzstruct Pixel_RGBA **)r   r   r   r#   )r   r$   r%   r   r   r   r   Ž   s    z_PyAccess32_4._post_initc             C   s-   |  j  | | } | j | j | j | j f S)N)r#   r&   r.   r/   r'   )r   r   r   r(   r   r   r   r   ‘   s    z_PyAccess32_4.get_pixelc             C   sm   |  j  | | } t | d d ƒ | _ t | d d ƒ | _ t | d d ƒ | _ t | d d ƒ | _ d  S)Nr   r)   r*   r0   é   )r#   r+   r&   r.   r/   r'   )r   r   r   r   r(   r   r   r   r   •   s
    z_PyAccess32_4.set_pixelN)r   r    r!   r,   r   r   r   r   r   r   r   r1   Œ   s   r1   c               @   s:   e  Z d  Z d Z d d „  Z d d „  Z d d „  Z d S)	Ú
_PyAccess8z' 1, L, P, 8 bit images stored as uint8 c             O   s   |  j  |  _ d  S)N)r   r#   )r   r$   r%   r   r   r   r       s    z_PyAccess8._post_initc             C   s   |  j  | | S)N)r#   )r   r   r   r   r   r   r   £   s    z_PyAccess8.get_pixelc          	   C   sK   y t  | d ƒ |  j | | <Wn& t  | d d ƒ |  j | | <Yn Xd  S)Nr)   r   )r+   r#   )r   r   r   r   r   r   r   r   ¦   s    z_PyAccess8.set_pixelN)r   r    r!   r,   r   r   r   r   r   r   r   r3   ž   s   r3   c               @   s:   e  Z d  Z d Z d d „  Z d d „  Z d d „  Z d S)	Ú_PyAccessI16_Nz2 I;16 access, native bitendian without conversion c             O   s   t  j d |  j ƒ |  _ d  S)Nzunsigned short **)r   r   r   r#   )r   r$   r%   r   r   r   r   ±   s    z_PyAccessI16_N._post_initc             C   s   |  j  | | S)N)r#   )r   r   r   r   r   r   r   ´   s    z_PyAccessI16_N.get_pixelc          	   C   sK   y t  | d ƒ |  j | | <Wn& t  | d d ƒ |  j | | <Yn Xd  S)Niÿÿ  r   )r+   r#   )r   r   r   r   r   r   r   r   ·   s    z_PyAccessI16_N.set_pixelN)r   r    r!   r,   r   r   r   r   r   r   r   r4   ¯   s   r4   c               @   s:   e  Z d  Z d Z d d „  Z d d „  Z d d „  Z d S)	Ú_PyAccessI16_Lz I;16L access, with conversion c             O   s   t  j d |  j ƒ |  _ d  S)Nzstruct Pixel_I16 **)r   r   r   r#   )r   r$   r%   r   r   r   r   Â   s    z_PyAccessI16_L._post_initc             C   s#   |  j  | | } | j | j d S)Né   )r#   Úlr&   )r   r   r   r(   r   r   r   r   Å   s    z_PyAccessI16_L.get_pixelc             C   sj   |  j  | | } y t | d ƒ } Wn% t k
 rK t | d d ƒ } Yn X| d @| _ | d ?| _ d  S)Niÿÿ  r   r)   é   )r#   r+   Ú	TypeErrorr7   r&   )r   r   r   r   r(   r   r   r   r   É   s    z_PyAccessI16_L.set_pixelN)r   r    r!   r,   r   r   r   r   r   r   r   r5   À   s   r5   c               @   s:   e  Z d  Z d Z d d „  Z d d „  Z d d „  Z d S)	Ú_PyAccessI16_Bz I;16B access, with conversion c             O   s   t  j d |  j ƒ |  _ d  S)Nzstruct Pixel_I16 **)r   r   r   r#   )r   r$   r%   r   r   r   r   Ö   s    z_PyAccessI16_B._post_initc             C   s#   |  j  | | } | j d | j S)Nr6   )r#   r7   r&   )r   r   r   r(   r   r   r   r   Ù   s    z_PyAccessI16_B.get_pixelc          	   C   s`   |  j  | | } y t | d ƒ } Wn t | d d ƒ } Yn X| d ?| _ | d @| _ d  S)Niÿÿ  r   r8   r)   )r#   r+   r7   r&   )r   r   r   r   r(   r   r   r   r   Ý   s    z_PyAccessI16_B.set_pixelN)r   r    r!   r,   r   r   r   r   r   r   r   r:   Ô   s   r:   c               @   s:   e  Z d  Z d Z d d „  Z d d „  Z d d „  Z d S)	Ú_PyAccessI32_Nz$ Signed Int32 access, native endian c             O   s   |  j  |  _ d  S)N)r   r#   )r   r$   r%   r   r   r   r   ê   s    z_PyAccessI32_N._post_initc             C   s   |  j  | | S)N)r#   )r   r   r   r   r   r   r   í   s    z_PyAccessI32_N.get_pixelc             C   s   | |  j  | | <d  S)N)r#   )r   r   r   r   r   r   r   r   ð   s    z_PyAccessI32_N.set_pixelN)r   r    r!   r,   r   r   r   r   r   r   r   r;   è   s   r;   c               @   sF   e  Z d  Z d Z d d „  Z d d „  Z d d „  Z d d	 „  Z d
 S)Ú_PyAccessI32_Swapz. I;32L/B access, with byteswapping conversion c             O   s   |  j  |  _ d  S)N)r   r#   )r   r$   r%   r   r   r   r   ö   s    z_PyAccessI32_Swap._post_initc             C   sv   t  j d | ƒ } t  j d | ƒ } | d | d | d | d f \ | d <| d <| d <| d <t  j d | ƒ d S)Nzint *zunsigned char *r2   r0   r*   r   )r   Únewr   )r   ÚiÚorigÚcharsr   r   r   Úreverseù   s
    0z_PyAccessI32_Swap.reversec             C   s   |  j  |  j | | ƒ S)N)rA   r#   )r   r   r   r   r   r   r      s    z_PyAccessI32_Swap.get_pixelc             C   s   |  j  | ƒ |  j | | <d  S)N)rA   r#   )r   r   r   r   r   r   r   r     s    z_PyAccessI32_Swap.set_pixelN)r   r    r!   r,   r   rA   r   r   r   r   r   r   r<   ô   s
   r<   c               @   s:   e  Z d  Z d Z d d „  Z d d „  Z d d „  Z d S)	Ú
_PyAccessFz 32 bit float access c             O   s   t  j d |  j ƒ |  _ d  S)Nzfloat **)r   r   r   r#   )r   r$   r%   r   r   r   r   	  s    z_PyAccessF._post_initc             C   s   |  j  | | S)N)r#   )r   r   r   r   r   r   r     s    z_PyAccessF.get_pixelc          	   C   s9   y | |  j  | | <Wn | d |  j  | | <Yn Xd  S)Nr   )r#   )r   r   r   r   r   r   r   r     s    z_PyAccessF.set_pixelN)r   r    r!   r,   r   r   r   r   r   r   r   rB     s   rB   Ú1ÚLÚPZLAZLaZPAZRGBZLABZHSVZYCbCrZRGBAZRGBaZRGBXZCMYKÚFÚIÚlittlezI;16zI;16LzI;16BzI;32LzI;32BFc             C   s?   t  j |  j d  ƒ } | s2 t j d |  j ƒ d  S| |  | ƒ S)NzPyAccess Not Implemented: %s)Úmode_mapÚgetÚmodeÚloggerÚdebug)r   r   Zaccess_typer   r   r   r=   :  s
    r=   )Ú
__future__r   ÚloggingÚsysZcffir   Ú	getLoggerr   rL   Údefsr   ZcdefÚobjectr   r"   r-   r1   r3   r4   r5   r:   r;   r<   rB   rI   Ú	byteorderr=   r   r   r   r   Ú<module>   s\   
	<










