#include"hensu.h" //for iWidth,iHeight & #include #include //int iWidth 画像横幅 //int iHeight 画像高さ void RGBtoHSB(LPDWORD RGB,double *H,double *S,double *B) { int r,g,b; int max,min; int x,y; for(y=0;y>16; g=(RGB[x+y*iWidth] & 0x0000ff00)>>8; b= RGB[x+y*iWidth] & 0x000000ff; max=(r360) out_hue[x+y*iWidth]-=360; else if(out_hue[x+y*iWidth]<0) out_hue[x+y*iWidth]+=360; if(sm>0) out_sat[x+y*iWidth]=in_sat[x+y*iWidth]+sm/100.0*(SAT_MAX-in_sat[x+y*iWidth]); else if(sm<0) out_sat[x+y*iWidth]=in_sat[x+y*iWidth]+sm/100.0*in_sat[x+y*iWidth]; else out_sat[x+y*iWidth]=in_sat[x+y*iWidth]; //if(in_sat[x+y*iWidth]==0) out_sat[x+y*iWidth]=0; //グレースケールの疑似カラー化を防止 if(bm>0){ out_bri[x+y*iWidth]=in_bri[x+y*iWidth]+bm/100.0*(BRI_MAX-in_bri[x+y*iWidth]); }else if(bm<0) out_bri[x+y*iWidth]=in_bri[x+y*iWidth]+bm/100.0*in_bri[x+y*iWidth]; else out_bri[x+y*iWidth]=in_bri[x+y*iWidth]; } } void hue_image(double *hue,LPDWORD image_out,double *sat,double stdhue=0) //stdhue=0 は赤を基準とする { int x,y,H; double delt; for(y=0;y0){ delt=fabs(hue[x+y*iWidth]-stdhue); if(delt>180) delt=360-delt; H=(int)(255-delt*255/180.0); image_out[x+y*iWidth]=RGB(H,H,H); }else image_out[x+y*iWidth]=0; } } void sat_image(double *sat,LPDWORD image_out) { int x,y,S; for(y=0;y