Some more work on HLS colors. Broken...
git-svn-id: svn://pulkomandy.tk/GrafX2/trunk@347 416bcca6-2ee7-4201-b75f-2eb2f807beb1
This commit is contained in:
		
							parent
							
								
									48979bf251
								
							
						
					
					
						commit
						a60b2bfd01
					
				
							
								
								
									
										36
									
								
								op_c.c
									
									
									
									
									
								
							
							
						
						
									
										36
									
								
								op_c.c
									
									
									
									
									
								
							@ -24,6 +24,7 @@
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <fcntl.h>
 | 
			
		||||
#include <sys/stat.h>
 | 
			
		||||
#include <math.h>
 | 
			
		||||
 | 
			
		||||
#include "op_c.h"
 | 
			
		||||
#include "erreurs.h"
 | 
			
		||||
@ -103,10 +104,43 @@ void rgb2hl(int r,int g,int b,byte * hr,byte * lr,byte* sr)
 | 
			
		||||
  *sr = (s*255.0);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void HLStoRGB(byte H,byte L,byte S, byte* R, byte* G, byte* B)
 | 
			
		||||
{
 | 
			
		||||
    float OffsetSaturation;
 | 
			
		||||
    float rf,gf,bf;
 | 
			
		||||
 | 
			
		||||
    S = 255 - S;
 | 
			
		||||
 | 
			
		||||
    if(H < 85)
 | 
			
		||||
	rf = fminf(1, (85 - H)  / 42.5);
 | 
			
		||||
 | 
			
		||||
    else if(H > 170)
 | 
			
		||||
	rf = fminf(1, (H - 170) / 42.5);
 | 
			
		||||
 | 
			
		||||
    if (H < 170)
 | 
			
		||||
	gf = fminf(1, (85 - abs(H -  85)) / 42.5);
 | 
			
		||||
 | 
			
		||||
    if (H > 85)
 | 
			
		||||
	bf = fminf(1, (85 - abs(H - 170)) / 42.5);
 | 
			
		||||
 | 
			
		||||
    if (S < 255)
 | 
			
		||||
    {
 | 
			
		||||
	rf = rf * (S / 255.0);
 | 
			
		||||
	gf = gf * (S / 255.0);
 | 
			
		||||
	bf = bf * (S / 255.0);
 | 
			
		||||
	OffsetSaturation = /*128 **/ (255 - S) / 255.0;
 | 
			
		||||
	rf += OffsetSaturation;
 | 
			
		||||
	gf += OffsetSaturation;
 | 
			
		||||
	bf += OffsetSaturation;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    *R = rf * ((255 - abs(L - 255)) / 255.0);
 | 
			
		||||
    *G = gf * ((255 - abs(L - 255)) / 255.0);
 | 
			
		||||
    *B = bf * ((255 - abs(L - 255)) / 255.0);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
///////////////////////////// M‚thodes de gestion des tables de conversion //
 | 
			
		||||
///////////////////////////// Méthodes de gestion des tables de conversion //
 | 
			
		||||
/////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
 | 
			
		||||
Table_conversion * TC_New(int nbb_r,int nbb_v,int nbb_b)
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										1
									
								
								op_c.h
									
									
									
									
									
								
							
							
						
						
									
										1
									
								
								op_c.h
									
									
									
									
									
								
							@ -148,6 +148,7 @@ byte TC_Get(Table_conversion * t,int r,int v,int b);
 | 
			
		||||
void TC_Set(Table_conversion * t,int r,int v,int b,byte i);
 | 
			
		||||
 | 
			
		||||
void rgb2hl(int r, int v,int b, byte* h, byte*l, byte* s);
 | 
			
		||||
void HLStoRGB(byte h, byte l, byte s, byte* r, byte* g, byte* b);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										33
									
								
								palette.c
									
									
									
									
									
								
							
							
						
						
									
										33
									
								
								palette.c
									
									
									
									
									
								
							@ -937,8 +937,21 @@ void Bouton_Palette(void)
 | 
			
		||||
        Effacer_curseur();
 | 
			
		||||
        if (Debut_block==Fin_block)
 | 
			
		||||
        {
 | 
			
		||||
          Modifier_Rouge(Fore_color,63-Jauge_rouge->Position,Palette_de_travail);
 | 
			
		||||
          Num2str(Palette_de_travail[Fore_color].R,Chaine,2);
 | 
			
		||||
	  if(Palette_mode_RGB)
 | 
			
		||||
	  {
 | 
			
		||||
	      Modifier_Rouge(Fore_color,63-Jauge_rouge->Position,Palette_de_travail);
 | 
			
		||||
	      Num2str(Palette_de_travail[Fore_color].R,Chaine,2);
 | 
			
		||||
	  } 
 | 
			
		||||
	  else
 | 
			
		||||
	  {
 | 
			
		||||
	      byte h,l,s;
 | 
			
		||||
 | 
			
		||||
	      rgb2hl(Palette_de_travail[Fore_color].R,Palette_de_travail[Fore_color].V,Palette_de_travail[Fore_color].B,&h,&l,&s);
 | 
			
		||||
	      h=(63-Jauge_rouge->Position)*4; // Enlever le *4 quand le slider ira de 0 à 255 comme il faut
 | 
			
		||||
	      HLStoRGB(h,l,s,&Palette_de_travail[Fore_color].R,&Palette_de_travail[Fore_color].V,&Palette_de_travail[Fore_color].B);
 | 
			
		||||
	      
 | 
			
		||||
	      Num2str((int)h>>2,Chaine,2);
 | 
			
		||||
	  }
 | 
			
		||||
          Print_dans_fenetre(180,172,Chaine,CM_Noir,CM_Clair);
 | 
			
		||||
        }
 | 
			
		||||
        else
 | 
			
		||||
@ -976,7 +989,21 @@ void Bouton_Palette(void)
 | 
			
		||||
        Effacer_curseur();
 | 
			
		||||
        if (Debut_block==Fin_block)
 | 
			
		||||
        {
 | 
			
		||||
          Modifier_Vert (Fore_color,63-Jauge_verte->Position,Palette_de_travail);
 | 
			
		||||
	  if(Palette_mode_RGB)
 | 
			
		||||
	  {
 | 
			
		||||
	      Modifier_Vert (Fore_color,63-Jauge_verte->Position,Palette_de_travail);
 | 
			
		||||
	      Num2str(Palette_de_travail[Fore_color].V,Chaine,2);
 | 
			
		||||
	  } 
 | 
			
		||||
	  else
 | 
			
		||||
	  {
 | 
			
		||||
	      byte h,l,s;
 | 
			
		||||
 | 
			
		||||
	      rgb2hl(Palette_de_travail[Fore_color].R,Palette_de_travail[Fore_color].V,Palette_de_travail[Fore_color].B,&h,&l,&s);
 | 
			
		||||
	      l=(63-Jauge_verte->Position)*4; // Mettre +1 quand on aura modifié la plage du slider
 | 
			
		||||
	      HLStoRGB(h,l,s,&Palette_de_travail[Fore_color].R,&Palette_de_travail[Fore_color].V,&Palette_de_travail[Fore_color].B);
 | 
			
		||||
	      
 | 
			
		||||
	      Num2str((int)h>>2,Chaine,2);
 | 
			
		||||
	  }
 | 
			
		||||
          Num2str(Palette_de_travail[Fore_color].V,Chaine,2);
 | 
			
		||||
          Print_dans_fenetre(207,172,Chaine,CM_Noir,CM_Clair);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user