Vous êtes sur la page 1sur 7

Module Arithmetique

Copyright (c) 2003-2004 Benjamin FOURNIER


Version 2.2.3 multi-langues avec ic�ne
Langue originale : Anglais
Langues compl�mentaires : Fran�ais
Pour tout renseignement concernant ce plugin: pluginsphotofiltre@yahoo.fr

Traduction
==========

Si vous d�sirez traduire ce plugin dans une autre langue envoyez moi un e-mail �
pluginsphotofiltre@yahoo.fr

If you want to translate this plugin in another language please send me an e-mail
to pluginsphotofiltre@yahoo.fr

Licence
=======

La licence de PhotoFiltre est applicable pour ce plugin (� l'exception du fait


qu'il n'y a pas d'enregistrement sp�cifique pour ce plugin)

Description
===========

Module externe (plugin) pour PhotoFiltre


Copyright (c) 2001-2003 Antonio DA CRUZ
Site Web : http://www.photofiltre.com
Permet d'effectuer de l'arithm�tique entre plusieurs images et/ou des couleurs

Installation
============

D�compressez le fichier 'Arithmetique.pfl' dans le dossier 'Plugins' de


PhotoFiltre.
Red�marrez ensuite PhotoFiltre pour charger le module.

Utilisation
===========

Ce module est un module de type Outil


il appara�t dans le menu Outils/Autre sous le nom Arithm�tique...

Ce module n'est disponible que si il y a au moins une image ouverte.

Il suffit d'�crire l'expression d�sir�e (par exemple (I1+I2)/2) en utilisant les


op�rateurs, les fonctions, les couleurs et les images. Pour ins�r�r une image il
suffit de double cliquer sur celle ci dans l'explorateur d'image situ� en bas de
la fen�tre. Une fois l'expression �crite il est possible de cliquer sur Apercu
pour voir le r�sultat. Une fois que l'on est satisfait du r�sultat, il suffit de
cliquer sur OK pour g�n�rer la nouvelle image r�sultat.

Probl�me avec la syntaxe color�e


================================

Si vous rencontrez des probl�mes avec le plugin arithm�tique il y a de forte


chance que cela soit du au contr�le permettant d'obtenir la syntaxe color�e. Il
est possible de le d�sactiver en ajoutant la ligne suivante dans la section
[Plugin Arithmetique] du fichier PhotoFiltre.ini :

[Plugin Arithmetique]
PasDeSyntaxe=1

Ecriture des expressions


========================

Toutes les op�rations peuvent �tre �crites en utilisant les boutons ou en tapant
int�gralement au clavier.

Une expression se compose :


---------------------------

- d'images : elles sont indiqu�es dans l'expression sous la forme I<n> avec n
compris entre 1 et le nombre d'images ouvertes. Le num�ro correspond � celui
indiqu� dans l'explorateur d'images. Une image est ins�r�e en double cliquant dans
l'explorateur d'image.

- de couleurs : elles sont indiqu�es dans l'expression sous la forme #RRVVBB en


hexa d�cimal (�quivalent au code HTML d'une couleur). Une couleur peut �tre
ins�r�e en cliquant sur le bouton color�.

- de nombre entiers : ils sont obligatoirement tap�s au clavier et doivent �tre


compris en -2147483647 et +2147483647 (pr�cision 32 bits sign�)

- des 4 op�rateurs usuels : + - * / Comme dans une expression arithm�tique


classique, la multiplication et la division sont prioritaires sur l'addition et la
soustraction. La division par 0 n'est pas consid�r�e comme une erreur mais les
bornes infinies sont utilis�es de la mani�re suivante :

si n > 0 : n / 0 vaut +2147483647


si n < 0 : n / 0 vaut -2147483647
si n = 0 : n / 0 vaut 0

- de l'op�rateur exposant : ^ qui permet d'obtenir le carr�, le cube etc.

- du modulo : mod qui permet d'obtenir le reste de la division enti�re

- des 6 op�rateurs de tests : = <> < > <= >=

Ils sont surtout utiles avec la fonction If mais peuvent �tre utilis�s tels
quel. Les op�rateurs renvoient 255 (blanc) lorsque la condition est vraie et 0
(noir) sinon.

- des fonctions logiques ou binaires : and or xor not

Ils sont surtout utiles avec la fonction If mais peuvent �tre utilis�s tels
quel.

- de parenth�ses : comme dans une expression arithm�tique classique elles


permettent de forcer la priorit� des op�rateurs.

- de commentaires mono ligne avec //

- autres fonctions :

Max(x1,..,xn) : Prend le maximum des argument pour chacune des composante RVB
Par exemple :
-------------

Max(#FF0000,#00FF00,#0000FF) donne #FFFFFF

Min(x1,...,yn) : Prend le minimum des argument pour chacune des composante RVB

Par exemple :
-------------

Min(#00FFFF,#FF00FF,#FFFF00) donne #000000

MaxLum(x1,...,yn) : Prend la couleur la plus lumineuse

Par exemple :
-------------

MaxLum(#FF0000,#80FF00) donne #80FF00

MinLum(x1,...,yn) : Prend la couleur la moins lumineuse

Par exemple :
-------------

MinLum(#FF0000,#80FF00) donne #FF0000

Avg(x1,...,yn) <=> (x1+...+yn)/n

AvgRGB(x) : Renvoie la moyenne des 3 composantes RVB cela permet de transformer


une image couleur en niveaux de gris

Lum(x) : Renvoie la luminance des 3 composantes RVB avec la formule 0.299R +


0.587G + 0.114B

RGB2HSL(x) : Converti une couleur RGB en son �quivalent HSL

HSL2RGB(x) : Converti une couleur HSL en son �quivalent RGB

RGB2YUV(x): Converti une couleur RGB en son �quivalent YUV

YUV2RGB(x): Converti une couleur YUV en son �quivalent RGB

R(x): Renvoi la composante rouge

G(x): Renvoi la composante verte

B(x): Renvoi la composante bleue

Abs(x): Renvoi la valeur absolue utile pour comparer des images

Root(x[,n]): Renvoi la racine n i�me de x. Si n n'est pas pr�cis� il s'agit de la


racine carr�e.

If(<condition>,<vrai>,<faux>) : Cette fonction permet de faire des tests


conditionnels sur les points des images.

Par exemple :
-------------

If(I1>I2,#FF0000,#00FF00) donne une image rouge et verte o� les points rouges


repr�sentent les points de I1 qui sont plus lumineux que ceux de I2 et o� les
points verts repr�sentents les points de I1 qui sont moins lumineux (ou aussi
lumineux) que ceux de I2.

X(x): Renvoi les coordonn�e en X de l'image cela permet de faire des d�grad�s
horizontaux

Y(x): Renvoi les coordonn�e en Y de l'image cela permet de faire des d�grad�s
verticaux

W(x): Renvoi la taille horizontale de l'image (utile pour inverser un d�grad�


horizontal)

H(x): Renvoi la taille verticale de l'image (utile pour inverser un d�grad�


vertical)

Stretch(x, y): Redimensionne l'image x � la taille de l'image y

BStretch(x, y): Identique � Stretch mais avec filtrage bilin�aire.

Tile(x, y): Redimensionne l'image x � la taille de l'image y en recopiant l'image


autant de fois que n�cessaire pour atteindre cette taille.

Scroll(x, dx, dy): Permet de d�caler l'image d'un certains nombre de pixels... Ce
qui disparait d'un cot� r�apparait de l'autre
dx indique le d�calage horizontal (n�gatif = � gauche, positif
= � droite)
dy indique le d�calage vertical (n�gatif = en haut, positif =
en bas)
A noter que le d�calage n'est pas obligatoirement le m�me pour
tous les points ou les composantes de l'images.

Par exemple :
-------------

Scroll(I1,W(I1)/2,H(I1)/2): D�cale l'image de fa�on � inverser les 4 coins

Scroll(I1,Y(I1),0): D�calage progressif des ligne (la premiere n'est pas d�cal�e,
la derni�re de la hauteur de l'image - 1)

Scroll(I1,-X(I1),-Y(I1)): Division de la taille de l'image par 2 et extension de


type motif

AlphaBlend(x, y, masque, max): AlphaBlending entre l'image x et l'image y en


utilisant le masque et en pr�cisant le maximum afin d'inverser le masque.

Par exemple :
-------------

AlphaBlend(I1,I2,X(I1),W(I1))

Permet de r�aliser un fondu artistique entre l'image I1 et l'image I2


- de variables :

Les variables permettent de d�composer une expression complexe en plusieurs


parties. Cela permet �galement d'�viter d'effectuer une m�me op�ration plusieurs
fois ce qui permet �galement d'acc�l�rer les temps de traitements.

Une variable est un identificateur commencant obligatoirement par une lettre ou le


caract�re '_'. Les chiffres peuvent �tre utilis�s � partir du deuxi�me caract�res.

D�claration d'une variable :


----------------------------

<Nom de la variable>:<Expression>;

Utilisation d'une variable :


----------------------------

<Nom de la variable>

Permutation des images


======================

Le drag & drop est disponible sur la liste d'image ce qui permet de r�ordonner les
images (ce qui peut �tre plus pratique que de changer les In dans l'expression)

Le drag & drop utilise le bouton droit de la souris.

Informations diverses
=====================

Toutes les op�rations sur les images sont r�alis�es avec des entiers 32 bits pour
chacune des composantes RVB. Les op�rations sont appliqu�es individuellement sur
chacune des 3 composantes.

Un nombre entier est consid�r� comme une couleur o� toutes les composantes sont
identiques (niveau de gris). Par exemple le nombre entier 10 est �quivalent � la
couleur #0A0A0A.

Lorsque une op�ration porte sur 2 images de tailles diff�rentes les images sont
redimensionn�es vers la plus grande taille possible au fur et � mesure de
l'�valuation de l'expression.

Lorsque une erreur est d�tect�e dans l'expression un message d'erreur explicite
indique la partie de l'expression qui est mal plac�e (ou token inattendu) ainsi
que la liste des possibilit�s (ou token possibles) � cet endroit de l'expression.
Le curseur est plac� apr�s la partie de l'expression erron�e.

Les espaces, les tabulations et les sauts de lignes peuvent �tre utilis�s pour
s�parer les �l�ments de l'expression (Exemple: I1 + I2)

Exemples d'expressions
======================

On suppose que 3 images sont ouvertes :

- Moyenne des 2 premi�res images :


(I1+I2)/2

ou

Avg(I1,I2)

- Extraire une composante de la premi�re image :

* Rouge :

I1*#010000 ou bien I1 and #FF0000

* Vert :

I1*#000100 ou bien I1 and #00FF00

* Bleu :

I1*#000001 ou bien I1 and #0000FF

- Somme de la composante rouge de l'image 1 avec la composante verte de l'image 2


et la composante bleue de l'image 3

I1*#010000+I2*#000100+I3*#000001 ou bien (I1 and #FF0000) + (I2 and #00FF00) + (I3


and #0000FF)

- Doubler l'intensit� lumineuse de l'image 1

I1*2

- Faire le carr� de chacune des composantes de l'image

I1^2

- Faire la diff�rence de 2 images :

* Obtenir une image binaire avec des points blanc o� les pixels sont diff�rents et
noir sinon (ma �t� utile pour v�rifier mon algo du jpeg sans pertes)

If(I1=I2,0,255) ou bien If(I1<>I2,255,0)

* Obtenir la diff�rence r��lle avec la couleur r�sultante

Abs(I1-I2)

Remarque : Les nombre d�cimaux ne sont pas disponibles mais il est possible de
contourner le probl�me en utilisant des fractions :

- Multiplier par 1,5 l'intensit� lumineuse de l'image 1

(I1*3)/2

Remarque : Les parenth�ses ne sont pas obligatoires ici

- Faire un d�grad� de gris horizontal adapt� � l'image :

X(I1)*255/W(I1)
ou dans l'autre sens :

255-(X(I1)*255/W(I1)) ou (W(I1)-X(I1))*255/W(I1)

- Faire un d�grad� de gris vertical adapt� � l'image :

Y(I1)*255/H(I1)

ou dans l'autre sens :

255-(Y(I1)*255/H(I1)) ou (H(I1)-Y(I1))*255/H(I1)

- Faire le tutorial du fondu paysage / portrait :

Cette formule suffit :

AlphaBlend(I1,I2,X(I1),W(I1))

avec I1 le portrait et I2 le paysage!

Exemples complets avec variables, fonctions, commentaires... :


==============================================================

R:Max(W(I1)/4,H(I1)/4); //Rayon central


C:Root((X(I1)-W(I1)/2)^2+(Y(I1)-H(I1)/2)^2); // Cercle en d�grad�
C:If(C<R,0,C-R); // Mettre en noir la partie centrale
M:Max(W(I1),H(I1))/2-R; // Maximum pour inverser le masque
IC:M-C; // Inversion du masque
(#0080C0*C+I1*IC)/M // Alpha blending avec une couleur

I1 est une image par exemple la panthere utilis�e dans le tutoriel Texte et image
du site officiel.

Assemmblage artistique entre 2 images :


=======================================

F:64; // Taille de la zone commune


H:Max(H(I1),H(I2)); // Hauteur maximale des 2 images
S1:BStretch(I1,W(I1)*H/H(I1),H); // Adaptation de la hauteur pour l'image 1
S2:BStretch(I2,W(I2)*H/H(I2),H); // Adaptation de la hauteur pour l'image 2
W:W(S1)+W(S2)-F; // Taille de l'image totale
T1:Tile(S1,W,H); // Augmentation de la zone de trevail de l'image 1
T2:Scroll(Tile(S2,W,H),W(S1)-F,0); // Augmentation de la zone de trevail de
l'image 2 et positionnement au bon endroit
If(X(T1)<W(S1)-F,T1, // Image 1
If(X(T1)>W(S1),T2, // Image 2
AlphaBlend(T1,T2,X(T1)-W(S1)+F,F))) // Fondu

Bonne utilisation !

Vous aimerez peut-être aussi