Sindbad~EG File Manager
o
�/�a�� � @ s� d dl mZmZ d dlT d dlZd dlZd dlZd dlZd dlZd dl Z d dl
mZ d dl
mZ dZ
dZdZd d
� Zdd� Zd
d� Zdd� Zdd� Zdd� Zdd� Zdd� Zdd� Zdd� Zdd� Zdd � Zd!d"� Zd#d$� Zd%d&� Zd'd(� Zd)d*� Z d+d,� Z!d^d.d/�Z"d0d1� Z#d2d3� Z$d4d5� Z%d6d7� Z&d8d9� Z'd:d;� Z(d<d=� Z)d>d?� Z*d@dA� Z+dBdC� Z,dDdE� Z-dFdG� Z.dHdI� Z/dJdK� Z0dLdM� Z1dNdO� Z2dPdQ� Z3dRdS� Z4dTdU� Z5dVdW� Z6dXdY� Z7dZd[� Z8d\d]� Z9dS )_� )�utils�os_utils)�*N)�core_install)�dcheck�� �2 � c C s� dd l }dd l} | jd | jd f}t|�|�d �}|�|�||d�g d�g�}|�|dd�dd�f �}|d d }|d d } |�| | g�| jd |�|| g�| jd |�| | g�| jd |�|| g�| jd g}
dd� |
D �}d d� |D �}d
d� |D �}
dd� |
D �}dd� |D �}d
d� |D �}t |�}t
|
�}t |�}t
|�}tt|| ��}tt|| ��}|�ddt|d | �gddt|d | �gg d�g�}|�|�|�|� dd�d d �f }|j
| |||f|jd�}|S )Nr � � � �?)r r r
� �?c S � g | ]}|d �qS �r � ��.0�ptr r �(/usr/share/hplip/base/imageprocessing.py�
<listcomp>V � z rotate_image.<locals>.<listcomp>c S � g | ]}|d kr|�qS r r �r �xr r r r W � c S � g | ]}|d k r|�qS r r r r r r r X r c S r �r
r r r r r r Z r c S r r r �r �yr r r r [ r c S r r r r r r r r \ r )�flags)�numpy�cv2�shape�tuple�array�vstack�getRotationMatrix2D�matrix�A�max�min�int�abs�
warpAffine�INTER_LINEAR)�image�angle�npr! �
image_size�image_center�rot_mat�rot_mat_notranslate�image_w2�image_h2�rotated_coords�x_coords�x_pos�x_neg�y_coords�y_pos�y_neg�right_bound�
left_bound� top_bound� bot_bound�new_w�new_h� trans_mat�
affine_mat�resultr r r �rotate_image4 sR ���$�rH c C s t t�|tjd ��d@ }|d@ dkr|ntj| }|tj tj tj }| t�|� |t�|� }| t�|� |t�|� }| |k rLt�||�nt�||�}tj| | } | |k r_|n| }
|
t�|� }|t�|� t�| � }|t�|� }
|
t�|� }|d| |d|
fS )a9
Given a rectangle of size wxh that has been rotated by 'angle' (in
radians), computes the width and height of the largest possible
axis-aligned rectangle within the rotated rectangle.
Original JS code by 'Andri' and Magnus Hoff from Stack Overflow
Converted to Python by Aaron Snoswell
r � r
r )r+ �math�floor�pi�cos�sin�atan2�tan)�w�hr0 �quadrant�
sign_alpha�alpha�bb_w�bb_h�gamma�delta�length�d�ar r r r r �largest_rotated_rect{ s
�r] c C s� | j d | j d f}t|d d �t|d d �f}||d kr$|d }||d kr.|d }t|d |d �}t|d |d �}t|d |d �}t|d |d �}| ||�||�f S )zn
Given a NumPy / OpenCV 2 image, crops it to the given width and height,
around it's centre point
r
r r
)r"