Le monochrome

But : partir d'une image couleur pour la convertir en une image monochrome.

Cela veut donc dire:

Convertir les niveaux d'intensités des 3 couleurs primaires en 1 niveau d'intensité pour la couleur monochrome. On pourra donc convertir une image couleur en une image avec dégradé de gris, mais aussi en dégradé vert (comme les vieux moniteurs verts), orange ou tout autre couleur.

Une solution consitera donc à additionner les 3 niveaux d'intensités et de diviser le résultat par 3. Ce qui nous donne une valeur moyenne des ces niveaux qui sera utilisée comme nouveau niveau d'intensité.

Il ne restera alors plus qu'à reporter cette valeur moyenne sur les couleurs primaires utilisées pour obtenir la couleur monochrome souhaitée.

Exemple simplifié de programme en assembleur:

**************************************
*** Image couleur en monochrome ***
*** En entrée : ***
*** A0.l Tampon des couleurs ***
*** A1.l Tampon monochrome ***
*** D0.w Nbre de couleurs-1 ***
*** D1.w Plan RVB ex.:R&B=%101 ***
*** En sortie : maj du tampon monochrome ***
**************************************

xdef monochrome

monochrome movem.l d0/d2-d7/a0-a1,-(a7)
   move.w #%111,d5
   move.w #4,d7
/* Calculer le niveau moyen */
bnb clr d6
   moveq #0,d2
   move.b (a0)+,d4
   move.b (a0)+,d2
   move.w d2,d3
   asr d7,d3
   and.w d5,d2
   and.w d5,d3
   and.w d5,d4
   add.w d3,d2
   add.w d4,d2
   divs #3,d2
/* Affecter cette valeur aux couleurs primaires demandées */

   btst #0,d1
   beq vok
   move.w d2,d6
vok asl d7,d2
   btst #1,d1
   beq rok
   or.w d2,d6
rok btst #2,d1
   beq fok
   asl d7,d2
   or.w d2,d6
fok move.w d6,(a1)+

/* Boucler sur le nombre de couleurs demandées */
   dbf d0,bnb
   movem.l (a7)+,d0/d2-d7/a0-a1
   rts
 end


Dans cet exemple, on ne peut indiquer que les couleurs primaires à utiliser en sortie. mais ces niveaux seront affectés par la valeur moyenne calculée. ceci sans prise en compte d'une valeur éventuellement déjà positionnée.
Il n'est donc pas possible d'initialiser les niveaux d'origines permettant d'avoir une couleur bien précise de la couleur monochrome.

Il faudrait donc modifier ce code pour permettre cela. Attention alors à ne pas oublier les valeurs maxi et mini des niveaux. (exemple sur un STF, il ne faut pas dépasser la valeur 7). Toutes valeurs supérieures à 7 doivent être ramenées à 7).