B .^W @s<ddlZddlmZddlmZddlmZddgdd ggZejd d d d xeD]\Z Z y^e dkrddl m Z m Z mZddlmZmZn,e d krddlm Z m Z mZddlmZmZWneefk rwTYnXd ZPqTWdZdZ d"ddZddZddZddZddZer(Gddde ZddZd d!ZdS)#N)BytesIO)Image)isPath5ZPyQt5Zside2ZPySide2cCs|dtjkS)Nr)sysmodules) qt_versionr //tmp/pip-install-mwhup7aw/Pillow/PIL/ImageQt.pyr T)keyreverse)QImageqRgbaQPixmap)QBuffer QIODeviceFcCst||||d@S)zA(Internal) Turns an RGB color into a Qt compatible color integer.l)r)rgbar r r rgb.srcCsdt}|tj|r(||dn ||dt}||| | dt |S)zs :param im: A PIL Image object, or a file name (given either as Python string or a PyQt string object) Zpngppmr) ropenrZ ReadWriteZhasAlphaChannelsaverwritedatacloseseekr)imbufferrr r r fromqimage5s   r$cCst|S)N)r$)r"r r r fromqpixmapKsr%c Csdddd|}||}t|d\}}||r0dnd}| d}|sH|Sg} x>tt||D]*} | || || d|d|q^Wd| S)zE converts each scanline of data from 8 bit to 32 bit aligned r)1LPrr )divmodrangelenappendjoin) byteswidthmodeZbits_per_pixelZ bits_per_lineZfull_bytes_per_lineZremaining_bits_per_lineZbytes_per_lineZ extra_paddingZnew_datair r r align8to32Ys r5c Csd}d}t|dr t|d}t|r2t|}|jdkrFtj}n|jdkrtj }g}x"t dD]}| t |||qdWn|jdkrtj }g}| }xt dt|dD]}| t |||dqWn|jd kr|d d }tj}nn|jd krPy|d d }Wn:tk rF|\}}}} td |||| f}YnXtj}ntd|j|pzt||jd|j} | |||dS)NtoUtf8zutf-8r'r(r)rRGBrawZBGRXRGBAZBGRAzunsupported image mode %r)rr"format colortable)hasattrstrr6rrrr3rZ Format_MonoZFormat_Indexed8r-r/rZ getpaletter.tobytesZ Format_RGB32 SystemErrorsplitmergeZ Format_ARGB32 ValueErrorr5size) r"rr=r<r4ZpaletterrrrZ__datar r r _toqclass_helperus@          rFcseZdZfddZZS)ImageQtcsXt|}|d|_t|j|djd|djd|d|drT||ddS)z An PIL image wrapper for Qt. This is a subclass of PyQt's QImage class. :param im: A PIL Image object, or a file name (given either as Python string or a PyQt string object). rr"rrr<r=N)rFZ_ImageQt__datasuper__init__rEZ setColorTable)selfr"Zim_data) __class__r r rIs    zImageQt.__init__)__name__ __module__ __qualname__rI __classcell__r r )rKr rGsrGcCst|S)N)rG)r"r r r toqimagesrPcCs&|jdkr|d}t|}t|S)Nr9r;)r3convertrPrZ fromImage)r"Zqimager r r toqpixmaps  rR)r)riorrZ_utilrZ qt_versionssortr Z qt_moduleZ PyQt5.QtGuirrrZ PyQt5.QtCorerrZ PySide2.QtGuiZPySide2.QtCore ImportError RuntimeErrorZqt_is_installedrr$r%r5rFrGrPrRr r r r s8    *