HSB矩形调色板设计和计算方法

HSB矩形调色板设计和计算方法
RGB调色板绘制较容易,HSB调色板较难绘制,前些天发文介绍了几个矩形样例的绘制方法,今介绍矩形的HSB调色板的设计方法和H,S,B值的计算方法,好东西必须与大家分享。

此文介绍HSB调色板和选色条的绘制方法,依据此方法可以仿制那些大牌绘图软件的调色板,在自己编制应用程序时遇到需要选色时,就要有调色板来选色,此方法就能使你很方便地创制自己的调色板。

SB选色条有二类:
一是双条式:S条饱和度从左起为100,向右趋向于0,即从原色到白色。B条亮度从右起为100,向左趋向于0,即从原色到黑色。B条也可设置为左起。
二是单条式:SB条合二为一,中间是它们的起始值100。S饱和度从中间100向右趋向于0,即从原色到白色。B亮度从中间100向左趋向于0,即从原色到黑色。此例采用双条式。

H调色板取色,二种设置,一是只取水平方向的值,0-360来计算H的色值。二是上下方向也取色,中线往上是S值,往下是V值。取色操作较麻烦。我采用分开取色,H板只取值计算H值,另加SV取色条,分别设置选色计算SV值。这样操作较方便。
SV取色条还有种取色方法,即用getpixel()方法,此方法简单直接,所见即所得。

5aef12dafd9b4fd5b6a243bd71d67aa2.png
HSB 矩形调色板设计要点:
1)界面设计,H 调色板绘制,SB 选色条绘制,            colorpad8 () ;
2)H 调色板点击选色,Hselect (),计算 H值;
3)H 值更新,同步SB 选色条更新,HRenew ();
4)SB 选色条点击选色,SRenew (),VRenew ();
        S, B值计算,值更新,显示更新。
源码中有详细注释,原理和语法都很简单,适用于初学者。希望大家喜欢。大家的点评是对我的鼓励。


补充一点,H板mouse或触控,若限定宽高,计算H是宽度,不会有越界问题。 SB选色条也这样。
RGB色 (+-)可设置调节rgb色彩,本例未设置。

 9e09ed4946f543a5acb80a8620174a93.png

e9b25052d76b46878287174afdd9b30c.png 

 

以下是源码:
 //OK按钮和H板,S,V取色条设置
         //H色板mousemove, click选色,
         {   px=x;  py=y;        //可设置为mousemove
         Hselect () ;      }    //H 色板click选色

    
      // S选色框mousemove, click > 改变颜色
           {      x1=x ; 
             SRenew ();    }

      // V选色框mousemove, click > 改变颜色
              {   x2=x ; 
             VRenew ();    }

   cmdOK_click ( ){
      // OK按钮, click 新的颜色选用 > 应用
               cs.SetFillMode (1) ; 
               cs.SetColor (255, r1, g1, b1) ;
          cs.DrawRect (100,625,220,680);   //新的选色
               cs.SetTextSize (24);    
               cs.SetColor (255,0,250,0 ) ;
          cs.DrawText ("应用颜色:", 100,610) ;
               }


//界面设计:
colorpad8 (){  //HSV 调色板设计示例(8)
//本例以windows窗体图片来示例。其实在Windows中用绘画语句也能画出窗体,我喜欢自己设计绘制各种图形图样,绘制按钮,滚动条等,甚至开个无框窗体,自己在Form上绘制个人风格的自制窗体,加个图片框设置应用功能。
      cs.ClearDraw (0,src);
    fname="/storage/emulated/0/form.jpg";
    cs.DrawBitmap(fname,0,6);   //加底图

          cs.SetFillMode (1);//0不填色,1填色
          cs.SetColor (255,0,0,0);
     cs.DrawRect (0,2,720,22);
     cs.DrawRect (0,2,12,570);
      cs.DrawRect (0,570,720,700);
         cs.SetColor (255,100,100,100);
     cs.DrawRect (28,65,709,521);   //大框线

 //绘制调色板( HSV )
          cs.SetStrokeWidth(1);    //线宽          
 //red-yellow-green-cyan-blue-purple-magenta-red
     for (i=0;i<=255;i++){  //绘制 H 调色板
        cs.SetColor (255,255,i,0); //red-yellow
              cs.DrawLine (i/3+50,80,i/3+50,280);
        cs.SetColor (255,255-i,255,0); //yellow-green
              cs.DrawLine (i/3+135,80,i/3+135,280);
       cs.SetColor (255,0,255,i);  //green-blue
              cs.DrawLine (i/3+220,80,i/3+220,280);
       cs.SetColor (255,0,255-i,255);  //blue-purple
              cs.DrawLine (i/3+305,80,i/3+305,280);
        cs.SetColor (255,i, 0,255); //purple-magenta
               cs.DrawLine (i/3+390,80,i/3+390,280);
        cs.SetColor (255,255,0,255-i);  //magenta-red
               cs.DrawLine (i/3+475,80,i/3+475,280);      }
 
//画上高光和下暗部 HSB set brightness
           cs.SetFillMode (0) ; 
           cs.SetStrokeWidth(2);    //线宽          
      for (i= 0; i<=100 ; i++ ){  //高光
            ca=255-i*3 ;
            if (ca<0) ca=0 ;
            cs.SetColor(ca,255,255,255 );
            cs.DrawRect (50,80, 560,80+i ) ;   }

           cs.SetStrokeWidth(1);    //线宽          
      for (i= 0; i<=100 ; i++ ){  //暗部
            ca=255-i*3 ;
            if (ca<0) ca=0 ;
            cs.SetColor(ca, 0, 0, 0 );
            cs.DrawRect (51,280, 560,280-i ) ;   }

//****  计算HSV ********
 //调色板尺寸: (50,80,560,280); 
 //mouse 调色板取色 xpos 计算, Hue 值0-360
//依取值计算 RGB 值,cr, cg, cb 
 //六段画调色板 255/3=85, 85*6=510 = 色板宽度
 //      1. (255,255,i,0);          //red-yellow        0  -  59
 //      2. (255,255-i,255,0);  //yellow-green   60 -119
 //      3. (255,0,255,i);          //green-blue      120-179
 //      4. (255,0,255-i,255);  //blue-purple     180-239
 //      5. (255, i , 0,255);  //purple-magenta  240-299
 //      6. (255,255,0,255-i);  //magenta-red   300-360
//依此6段设色,每段60度,可定RGB色
// 135,  85=60,      220, 170=120°,   305, 255=180° ,  
// 390, 340=240 ,  475, 425=300°,   560, 510=360°
//标xpos=px,  H=(px-50)/1.4166
//依mouse 选色 > 计算H 值
//px=510/360=1.4166(每度)
 
        px=H*1.416+50 ;   //反求 px 画游标
//标记H值画游标,更新数值,更新选色块
        cs.SetFillMode (1);//0不填色,1填色
        cs.SetStrokeWidth(3); 
            cs.SetColor(255,110,110,110 );
        cs.DrawRect (46,281,564,295);  //擦除
            cs.SetColor(255,255,0,0 );
        cs.DrawRect (px-1,281,px+1,294);  //游标
        cs.DrawCircle (px,290,4) ;
               cs.Update ();   

//H色板显示mouse 选色,计算RGB (r,g,b)
      cs.SetFillMode (1) ;   
    if (H<=60) {               //1. red
          cr=255;       cb=0; 
          cg=(int)(H*255/60) ;     }
    if (H>60&&H<=120) {   //2. yellow
          cg=255;       cb=0; 
          cr=(int)(255-(H-60)*255/60) ;     }
    if (H>120&&H<=180) {   //3. green
          cr=0;       cg=255; 
          cb=(int)((H-120)*255/60) ;     }
    if (H>180&&H<=240) {   //4. cyan
           cg=(int)(255-(H-180)*255/60 ) ;     
           cr=0 ;        cb=255 ;        }      
    if (H>240&&H<=300) {  //5. blue
           cr=(int)((H-240)*255/60 ) ;     
           cg=0 ;   cb=255 ;        }
    if (H>300&&H<=360) {  //6. magenta
           cr=255;  cg=0;  
           cb=(int)(255-(H-300)*255/60 ) ;       }
       r1=cr ; g1=cg ;  b1=cb ;   //新的初值

//依选色值计算,显示取色
         cs.SetFillMode (1) ; 
         cs.SetColor (255, cr, cg, cb ); 
      cs.DrawRect (612,82,664,134);  //H板色show
      cs.DrawRect (469,305,550,398);   //新的选色
 
//取色后,S和B 的初始值是100。即选色条右位
       // S=100 ;   V=100 ;   //初始值
//选色条颜色依所取色来绘出,六类基色1-6
// S.xpos<435, V=100,   V.xpos<435, S=100
//拖动游标改变取色
//计算S,V 值,联动SV值显示和已选色更新(新的)
//Windows编程,标尺设置很简单
//依H绘制选色条:draw SV select color bar
      R=cr ;  G=cg ;   B=cb ;
            cs.SetStrokeWidth(2); 
    for (i=0;i<=255 ;i++){  //调色板:选色条
              R=R+i ;  G=G+i ;  B=B+i ;
          if (R>255) R=255 ;
          if (G>255) G=255 ;
          if (B>255) B=255 ;
      cs.SetColor (255, R, G, B ) ; 
      cs.DrawLine (435-i*1.5, 305,435-i*1.5,330);       
             R=R-i ;  G=G-i ;  B=B-i ;
          if (R<0) R=0 ;
          if (G<0) G=0 ;
          if (B<0) B=0 ;
       cs.SetColor (255, R, G, B ) ; 
       cs.DrawLine (435-i*1.5, 375,435-i*1.5, 400 );  }  

//画S,B标尺标线
           cs.SetStrokeWidth(1); 
           cs.SetTextStyle (0) ; 
     for (i=0; i<=10; i++){    //画标线
          dx=i*25.5*1.5 ;  
          cs.SetColor (255, 250, 250, 250 ) ; 
          cs.DrawLine (dx+51,343,dx+51,348);     
          cs.DrawLine (dx+51,367,dx+51,372);    
       }
             cs.SetFillMode (1) ; 
             cs.SetTextSize (16);    
           cs.DrawText ("0 ", 46,363);
           cs.DrawText ("100 ", 418,363);
               
      //画游标
            cs.SetFillMode (1);//0不填色,1填色
            cs.SetColor (255,250,20,250);
       x1=435 ; x2=435 ;   //S, V值初始值 100=435
            cs.SetStrokeWidth(2); 
            cs.SetColor (255,250,0,0);
       cs.DrawRect (x1-1,331,x1+1,337);   //游标尺1
       cs.DrawCircle (x1,337,4);
       cs.DrawRect (x2-1,401,x2+1,407);   //游标尺2
       cs.DrawCircle (x2,407,4);
//显示HSB计算结果
           cs.SetTextStyle (0) ; 
           cs.SetFillMode (1);//0不填色,1填色
           cs.SetColor (255,150,150,150);
       cs.DrawRect (610,147,665,180);   //标值
       cs.DrawRect (610,187,665,220);   
       cs.DrawRect (610,227,665,260);   
       cs.DrawRect (610,287,665,320);   
       cs.DrawRect (610,327,665,360);   
       cs.DrawRect (610,367,665,400);   
          cs.SetTextSize (20);    
          cs.SetColor (255,240,240,240);
       cs.DrawText ("< H :  ", 564,115);
       cs.DrawText ("R :  ", 580,170);
       cs.DrawText ("G :  ", 580,210);
       cs.DrawText ("B :  ", 580,250);
      ss1=intToString (cr);
       ss2=intToString (cg);
       ss3=intToString (cb);
          tab=0 ;     //put text center
          if (cr<10) tab=12;
          if (cr>9&&cr<100) tab=6 ;
       cs.DrawText (ss1, 620+tab,170);
          tab=0 ;
          if (cg<10) tab=12;
          if (cg>9&&cg<100) tab=6 ;
      cs.DrawText (ss2, 620+tab,210);
          tab=0 ;
          if (cb<10) tab=12;
          if (cb>9&&cb<100) tab=6 ;
       cs.DrawText (ss3, 620+tab,250);
 
       cs.DrawText ("H :             度", 580,310);
       cs.DrawText ("S :              % ", 580,350);
       cs.DrawText ("B :              % ", 580,390);
       ss1=intToString (H);
       ss2=intToString (S);
       ss3=intToString (V);
          tab=0 ;
          if (H<10) tab=12;
          if (H>9&&H<100) tab=6 ;
       cs.DrawText (ss1, 620+tab,310);
          tab=0 ;
          if (S<10) tab=12;
          if (S>9&&S<100) tab=6 ;
      cs.DrawText (ss2, 620+tab,350);
          tab=0 ;
          if (V<10) tab=12;
          if (V>9&&V<100) tab=6 ;
       cs.DrawText (ss3, 620+tab,390);
       cs.DrawText ("新的 ", 491,358);
       cs.DrawText ("S ", 445,325);
       cs.DrawText ("B ", 445,395);
 
//画按钮
          cs.SetColor (255,120,120,120); 
       cs.DrawRect (570,450,664,489);   //按钮
        cs.DrawRect (460,450,554,489);   //按钮
         cs.SetColor (255,250,250,250); 
       cs.DrawRect (572,451,662,486);   //按钮
       cs.DrawRect (462,451,552,486);   //按钮
          cs.SetColor (255,200,200,200); 
       cs.DrawRect (574,454,662,487);   //按钮
       cs.DrawRect (464,454,552,487);   //按钮
          cs.SetColor (255,220,220,220); 
       cs.DrawRect (575,454,658,483);   //按钮
       cs.DrawRect (465,454,548,483);   //按钮
          cs.SetColor (255,0,0,0); 
          cs.SetTextSize (22);    
       cs.DrawText ("确 定 ", 595, 477);
       cs.DrawText ("取 消 ", 485, 477);

//另外RGB选色可加调整小按钮+-选色
//也可使用scrollbar来设置,调节RGB色,
// S 选色条和 B 选色条联动显示选色
       cs.SetColor (255,250,0,0);  //调色按钮red
       cs.DrawRect (667,147,690,163);   
       cs.DrawRect (667,164,690,180);   
       cs.SetColor (255,0,240,0);  //调色按钮green
       cs.DrawRect (667,187,690,203);   
       cs.DrawRect (667,204,690,220);   
       cs.SetColor (255,0,0,250);  //调色按钮blue
       cs.DrawRect (667,227,690,243);   
       cs.DrawRect (667,244,690,260);   

        cs.SetColor (255,250,250,250);  //调色按钮
        cs.DrawText ("+ ",672,162);
        cs.DrawText ("-- ",672,178);
        cs.DrawText ("+ ",672,202);
        cs.DrawText ("-- ",672,218);
        cs.DrawText ("+ ",672,242);
        cs.DrawText ("-- ",672,258);
 
//题标,框线   
          cs.SetFillMode (0);//0不填色,1填色
           cs.SetStrokeWidth(2);    //线宽          
            cs.SetColor (255,190,190,190);
     cs.DrawRect (50,80,560,280);   //调色板框线
          cs.SetStrokeWidth(1);    //线宽          
     cs.DrawRect (610,80,665,135);   //选色rgb框线
     cs.DrawRect (50,304, 436,330);  //选色条框线
     cs.DrawRect (50,374, 436,400);  //选色条框线
     cs.DrawRect (467,303,552,400);   //已选色
 
 //print 题标
     cs.SetTextSize (34);    
       cs.SetTextStyle (1) ; 
       cs.SetFillMode (1) ; 
    ss=" HSB 调色板设计  示例( 8 )" ;
       cs.SetColor (255,0,150,0);
    cs.DrawText (ss,54,574);
       cs.SetColor (255,0,250,0);
    cs.DrawText (ss,50,570);
       cs.SetFillMode (0) ; 
    cs.SetColor (255,250,220,0);
    cs.DrawText (ss,50,570);
    cs.Update ();
}//colorpad8 ()

de18e95b499a416dbe8c085af2629fb4.png

2601215fbe78489fbd4be2e7545cf6f3.png 

 

Hselect (){ 
 //计算H值
 //  xpos1=50;  xpos2=560;  H 宽度 =560-50=510
 //x1=px;  y1=py;   //mouse click new point px,  py
 // 510/360=1.41666
    H=(int)((px-50)/1.4166) ;
//****计算如此简单,没深奥的公式 *****
//标记H值画游标,更新数值,更新选色块
        cs.SetFillMode (1);//0不填色,1填色
        cs.SetStrokeWidth(3); 
            cs.SetColor(255,110,110,110 );
        cs.DrawRect (46,281,564,295);  //擦除
            cs.SetColor(255,255,0,0 );
        cs.DrawRect (px-1,281,px+1,294);  //游标
        cs.DrawCircle (px,290,4) ;
               cs.Update ();   
//更新数值,显示
         HRenew () ;
}//Hselect ()

HRenew (){ //依H值更新
//****  计算HSV ********
//调色板尺寸:scale (50,80,560,280); 
//mouse 调色板取色 xpos  计算 Hue 值
//计算也可加S饱和度设置,即二点距离 L长度(高)
//可计算取得 RGB 值,cr, cg, cb 
//六段画调色板 255/3=85, 85*6=510 = 色板宽度
 //      1. (255,255,i,0);          //red-yellow        0  -  59
 //      2. (255,255-i,255,0);  //yellow-green   60 -119
 //      3. (255,0,255,i);          //green-blue      120-179
 //      4. (255,0,255-i,255);  //blue-purple     180-239
 //      5. (255, i , 0,255);  //purple-magenta  240-299
 //      6. (255,255,0,255-i);  //magenta-red   300-360
//依此6段设色,每段60度,可定RGB色

//* H色板显示mouse 选色,计算RGB (r,g,b)
      cs.SetFillMode (1) ;   //六类基色
    if (H<=60) {               //1. red
          cr=255;       cb=0; 
          cg=(int)(H*255/60) ;     }
    if (H>60&&H<=120) {   //2. yellow
          cg=255;       cb=0; 
          cr=(int)(255-(H-60)*255/60) ;     }
    if (H>120&&H<=180) {   //3. green
          cr=0;       cg=255; 
          cb=(int)((H-120)*255/60) ;     }
    if (H>180&&H<=240) {   //4. cyan
           cg=(int)(255-(H-180)*255/60 ) ;     
           cr=0 ;        cb=255 ;        }      
    if (H>240&&H<=300) {  //5. blue
           cr=(int)((H-240)*255/60 ) ;     
           cg=0 ;   cb=255 ;        }
    if (H>300&&H<=360) {  //6. magenta
           cr=255;  cg=0;  
           cb=(int)(255-(H-300)*255/60 ) ;       }
     r1=cr;  g1=cg;  b1=cb;  //设置新的色rgb

//依选色值计算,显示取色
//选色显示:当前,新的
          cs.SetFillMode (1) ; 
      cs.SetColor (255,cr, cg, cb );   //依选色显示
      cs.DrawRect (612,82,664,134);  //H板色show
      cs.DrawRect (469,305,550,398);   //新的选色
 
//取色后,S和V 的初始值是100。即选色条的中心位
        S=100 ;   V=100 ;   //初始值
     //H色板取色后,SB值和游标初始值均为100
//选色条颜色依所取色来绘出,六类基色1-6
//依据取色条的游标的xpos值计算 SV值 
//游标 xpos=x1,x2, 100=435
//依H值的rgb绘制SV选色条:draw S,B bar
           R=cr ;  G=cg ;   B=cb ;
            cs.SetStrokeWidth(2); 
    for (i=0;i<=255 ;i++){  //调色板:选色条
              R=R+i ;  G=G+i ;  B=B+i ;
          if (R>255) R=255 ;
          if (G>255) G=255 ;
          if (B>255) B=255 ;
      cs.SetColor (255, R, G, B ) ; 
      cs.DrawLine (435-i*1.5, 305,435-i*1.5,330);   
              R=R-i ;  G=G-i ;  B=B-i ;
          if (R<0) R=0 ;
          if (G<0) G=0 ;
          if (B<0) B=0 ;
       cs.SetColor (255, R, G, B ) ; 
       cs.DrawLine (435-i*1.5, 375,435-i*1.5, 400 );  }  

//画游标
            cs.SetFillMode (1);//0不填色,1填色
            cs.SetColor (255,250,20,250);
       x1=435 ; x2=435 ;     //S, V值100=435
            cs.SetStrokeWidth(2); 
           cs.SetColor (255,110,110,110);  //擦除
       cs.DrawRect (48,331,436,341);   //游标尺1
       cs.DrawRect (48,401,436,411);   //游标尺1
             cs.SetColor (255,250,0,0);
       cs.DrawRect (x1-1,331,x1+1,337);   //游标尺1
       cs.DrawCircle (x1,337,4);
       cs.DrawRect (x2-1,401,x2+1,407);   //游标尺2
       cs.DrawCircle (x2,407,4);

  //更新值,显示数值
         cs.SetTextStyle (0) ; 
           cs.SetFillMode (1);//0不填色,1填色
           cs.SetColor (255,150,150,150);
       cs.DrawRect (610,147,665,180);   //标值底色
       cs.DrawRect (610,187,665,220);   
       cs.DrawRect (610,227,665,260);   
       cs.DrawRect (610,287,665,320);   
       cs.DrawRect (610,327,665,360);   
       cs.DrawRect (610,367,665,400);   

           cs.SetColor (255,250,250,250);
           cs.SetTextSize (20);    
       ss1=intToString (cr);
       ss2=intToString (cg);
       ss3=intToString (cb);
          tab=0 ;     //put text center
          if (cr<10) tab=12;
          if (cr>9&&cr<100) tab=6 ;
       cs.DrawText (ss1, 620+tab,170);
          tab=0 ;
          if (cg<10) tab=12;
          if (cg>9&&cg<100) tab=6 ;
      cs.DrawText (ss2, 620+tab,210);
          tab=0 ;
          if (cb<10) tab=12;
          if (cb>9&&cb<100) tab=6 ;
       cs.DrawText (ss3, 620+tab,250);
 
       ss1=intToString (H);
       ss2=intToString (S);
       ss3=intToString (V);
          tab=0 ;
          if (H<10) tab=12;
          if (H>9&&H<100) tab=6 ;
       cs.DrawText (ss1, 620+tab,310);
          tab=0 ;
          if (S<10) tab=12;
          if (S>9&&S<100) tab=6 ;
      cs.DrawText (ss2, 620+tab,350);
          tab=0 ;
          if (V<10) tab=12;
          if (V>9&&V<100) tab=6 ;
       cs.DrawText (ss3, 620+tab,390);

    cs.Update ();
}//HRenew()

addPicture (){  //加底图
    fname="/storage/emulated/0/form.jpg";
    cs.DrawBitmap(fname,0,6);   //加底图
          cs.SetFillMode (1);//0不填色,1填色
          cs.SetColor (255,0,0,0);
     cs.DrawRect (0,2,720,22);
     cs.DrawRect (0,2,12,570);
     cs.DrawRect (0,570,720,600);
         cs.SetColor (255,100,100,100);
     cs.DrawRect (28,65,709,521);   //大框线

    cs.Update ();
}//addPicture()

SRenew (){   //S选色条点击拖动选色
       //get S xpos=x1 
        V=100 ;    x2=435 ;
        S=(int)((x1-50)/2.55/1.5) ;
        kn=(int)((100-S)*2.55) ;
        r1=cr+kn ;  g1=cg+kn ;  b1=cb+kn ;
        if (r1>255) r1=255 ;
        if (g1>255) g1=255 ;
        if (b1>255) b1=255 ;
          cs.SetColor (255, r1, g1, b1);
       cs.DrawRect (469,305,550,398);   //新的选色
 
      //画游标,更新 SV 值
            cs.SetFillMode (1);//0不填色,1填色
            //S, V初值100=435
            cs.SetStrokeWidth(2); 
            cs.SetColor (255,110,110,110);  //擦除
       cs.DrawRect (46,331,439,342);   //游标尺1
       cs.DrawRect (46,401,439,411);   //游标尺2
             cs.SetColor (255,250,0,0);
             cs.SetColor (255,250,0,0);
       cs.DrawRect (x1-1,331,x1+1,337);   //游标尺1
       cs.DrawCircle (x1,337,4);
       cs.DrawRect (x2-1,401,x2+1,407);   //游标尺2
       cs.DrawCircle (x2,407,4);

           cs.SetTextSize (20);
           cs.SetTextStyle (0) ; 
           cs.SetColor (255,150,150,150);
       cs.DrawRect (610,327,665,360);   
       cs.DrawRect (610,367,665,400);   
           cs.SetColor (255,250,250,250);
       ss2=intToString (S);
       ss3=intToString (V);
          tab=0 ;
          if (S<10) tab=12;
          if (S>9&&S<100) tab=6 ;
      cs.DrawText (ss2, 620+tab,350);
          tab=0 ;
          if (V<10) tab=12;
          if (V>9&&V<100) tab=6 ;
      cs.DrawText (ss3, 620+tab,390);
    cs.Update ();
}//SRenew ()

 VRenew (){  //V选色条点击拖动选色
       //* get V xpos=x2 
        S=100 ;    x1=435 ;
        V=(int)((x2-50)/2.55/1.5) ;
        kn=(int)((100-V)*2.55) ;
        r1=cr-kn ;  g1=cg-kn ;  b1=cb-kn ;
        if (r1<0) r1=0 ;
        if (g1<0) g1=0 ;
        if (b1<0) b1=0 ;
          cs.SetColor (255, r1, g1, b1);
       cs.DrawRect (469,305,550,398);   //新的选色
 
      //画游标,更新SV值
            cs.SetFillMode (1);//0不填色,1填色
            cs.SetColor (255,250,20,250);
            //S, V初值100=435
            cs.SetStrokeWidth(2); 
            cs.SetColor (255,110,110,110);  //擦除
       cs.DrawRect (46,331,439,342);   //游标尺1
       cs.DrawRect (46,401,439,411);   //游标尺2
             cs.SetColor (255,250,0,0);
             cs.SetColor (255,250,0,0);
       cs.DrawRect (x1-1,331,x1+1,337);   //游标尺1
       cs.DrawCircle (x1,337,4);
       cs.DrawRect (x2-1,401,x2+1,407);   //游标尺2
       cs.DrawCircle (x2,407,4);

            cs.SetTextSize (20);
            cs.SetTextStyle (0) ; 
            cs.SetColor (255,150,150,150);
       cs.DrawRect (610,327,665,360);   
       cs.DrawRect (610,367,665,400);   
            cs.SetColor (255,250,250,250);
       ss2=intToString (S);
       ss3=intToString (V);
            tab=0 ;
          if (S<10) tab=12;
          if (S>9&&S<100) tab=6 ;
      cs.DrawText (ss2, 620+tab,350);
          tab=0 ;
          if (V<10) tab=12;
          if (V>9&&V<100) tab=6 ;
       cs.DrawText (ss3, 620+tab,390);
    cs.Update ();
}//VRenew ()


//**** End ********

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/567196.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

jdbc操作数据库 and 一个商品管理页面

文章目录 1. 介绍1.1 应用知识介绍1.2 项目介绍 2. 文件目录2.1 目录2.2 介绍以下&#xff08;从上到下&#xff09; 3. 相关代码3.1 DBConnection.java3.2 MysqlUtil.java3.3 AddServlet.java3.4 CommodityServlet.java3.5 DelectServlet.java3.6 SelectByIdServlet.java3.7 S…

Springboot 结合PDF上传到OSS

目录 一、首先注册阿里云OSS&#xff08;新用户免费使用3个月&#xff09; 二、步骤 2.1 将pdf模板上传到oos 2.2 这里有pdf地址,将读写权限设置为共工读 ​编辑 三、代码 3.1 pom.xml 3.2 配置文件 3.3 oss model 3.4 配置类(不需要修改) 3.5 将配置类放入ioc容器 3.…

【C++】:构造函数和析构函数

目录 前言一&#xff0c;构造函数**1.1 什么是构造函数****1.2 构造函数的特性**1.3 总结 二&#xff0c;析构函数**2.1 什么是析构函数****2.2 析构函数的特性****2.3 总结** 前言 如果一个类中什么成员都没有&#xff0c;简称为空类。 空类中真的什么都没有吗&#xff1f;并…

JetBrains PhpStorm v2024.1 安装教程 (PHP集成开发IDE)

前言 PhpStorm是由JetBrains推出的一款轻量级集成开发环境&#xff0c;专为PHP开发者而设计。该软件融合了智能的HTML/CSS/JavaScript/PHP编辑器、代码质量分析工具、版本控制系统集成&#xff08;包括SVN和GIT&#xff09;、调试和测试等功能。除此之外&#xff0c;PhpStorm还…

画图的神器及必备的调色和选图工具

大学生研究生论文写作及画图的神器 前言常用的工具集合画图工具配色参考画图神器词云 最后下篇 前言 好久没有更博&#xff0c;来更一下吧。最近刚好被问到平常是用什么来画图的&#xff0c;包括会议论文&#xff0c;各种类型的PPT汇报以及项目报告等等里面的图怎么画好。所以…

CSS动画(css、js动画库:各种动画效果)

第一种方法&#xff1a;文字从上到下显示动画&#xff1b; <div class"text-container"><div class"text">文字从上到下显示</div></div><style scoped> /*确保 keyframes 规则在引用它的任何选择器之前定义&#xff0c;以避…

Linux服务器网络问题排查思路

服务器网络问题排查 一.测试是否能ping通其他服务器 ping <其他电脑的IP>如图是网段互通的情况 如图是不互通的情况 该命令是最常用的命令&#xff0c;主要功能如下&#xff1a; 网络连通性&#xff1a; ping 用于检查两台主机之间是否可以相互通信。如果目标主机可达…

DB索引B+树SQL优化

数据库的索引就像一本书的目录&#xff0c;查数据快人一步&#xff0c;快速定位&#xff0c;精准打击&#xff01; 什么是数据库的索引&#xff1f; 官方介绍索引是帮助MySQL高效获取数据的数据结构。更通俗的说&#xff0c;数据库索引好比是一本书前面的目录&#xff0c;能加…

invidia-smi占用显存,无法显示PID

如果是动用了子线程创建进程&#xff0c;比如利用accelerate训练脚本&#xff0c;那么大概率可以通过这种方式解决&#xff1a;nvidia-smi没有进程&#xff0c;但是显存占用_nvidia-smi有的卡是0%-CSDN博客 如果这种方法不可用&#xff0c;请尝试直接查询所有python进程&#x…

BI建设案例:FineBI大数据分析平台助力工程机械行业降本增效

工程机械行业作为国民经济的重要支柱&#xff0c;产品多样化、应用广泛&#xff0c;市场集中度高。其上游涉及原材料和核心零部件&#xff0c;下游则与房地产、基建工程和采矿等行业紧密相连。 如今&#xff0c;中国已崛起为全球工程机械制造大国&#xff0c;各类机械产品产量…

关于MCU核心板的一些常见问题

BGA植球与焊接&#xff08;多涂焊油&#xff09;&#xff1a; 【BGA芯片是真麻烦&#xff0c;主要是植锡珠太麻烦了&#xff0c;拆一次就得重新植】https://www.bilibili.com/video/BV1vW4y1w7oNvd_source3cc3c07b09206097d0d8b0aefdf07958 / NC电容一般有两种含义&#xff1…

Rust Tracing 入门

Tracing 是一个强大的工具&#xff0c;开发人员可以使用它来了解代码的行为、识别性能瓶颈和调试问题。 Rust 是一种以其性能和安全保证而闻名的语言&#xff0c;在它的世界中&#xff0c;跟踪在确保应用程序平稳高效运行方面发挥着至关重要的作用。 在本文中探讨Tracing 的概…

数据结构之顺序表的实现(C语言版)

Hello, 大家好&#xff0c;我是一代&#xff0c;今天给大家带来有关顺序表的有关知识 所属专栏&#xff1a;数据结构 创作不易&#xff0c;望得到各位佬们的互三呦 一.前言 1.首先在讲顺序表之前我们先来了解什么是数据结构 数据结构是由“数据”和“结构”两词组合⽽来。 什…

安全特低电压 SELV(Safety Extra Low Voltage,缩写SELV) 是不接地系统的安全特低电压

SELV LED驱动器 市场上有很多LED灯是非隔离的&#xff0c;甚至还有灯条要100多伏特电压才能点亮的&#xff0c;安全吗&#xff1f; 国外多数LED驱动器标注了SELV&#xff0c;为什么&#xff1f; 安全特低电压 SELV(Safety Extra Low Voltage&#xff0c;缩写SELV) 是不接地系…

谈谈前端CSS盒模型

前言&#xff1a; 什么是CSS盒模型&#xff1f;盒模型的构造&#xff1f; 在前端开发中&#xff0c;CSS 盒模型是一种非常基础且核心的概念&#xff0c;它描述了文档中的每个元素被框架处理的方式。 ---- 打开浏览器开发者工具&#xff0c;查看Elements右侧下的Styles底部。 …

上手GitHub Copilot让AI写代码,效率飞起!

1 GitHub Copilot介绍 GitHub Copilot 由 GitHub 和 OpenAI 共同开发的人工智能代码辅助工具&#xff0c;可自动地生成高质量代码片段、上下文信息等。通过自然语言处理和机器学习技术&#xff0c;通过分析程序员编写的代码、注释和上下文信息&#xff0c;自动生成代码&#x…

【JAVA】UDP与TCP套接字编程

目录 一、UDP数据报套接字编程 1、DatagramSocket API 2、DatagramPacket API 3、InetSocketAddress API 4、示例一 5、示例二 二、TCP流套接字编程 1、ServerSocket API 2、Socket API 3、TCP中的长短连接 4、示例一 5、示例二 一、UDP数据报套接字编程 1、Datag…

山岭隧道及道路3D建模教程【Blender】

创建具有恒定坡度的山路、隧道的信息和技术似乎散布在互联网上。 在这篇文章中&#xff0c;我将它们全部收集在一起。 这篇文章的大纲如下&#xff1a; 创建一座山创建一条路挖一条隧道 道路的坡度将固定为常数&#xff0c;从而消除颠簸。 NSDT工具推荐&#xff1a; Three.j…

yolo-驾驶行为监测:驾驶分心检测-抽烟打电话检测

在现代交通环境中&#xff0c;随着汽车技术的不断进步和智能驾驶辅助系统的普及&#xff0c;驾驶安全成为了公众关注的焦点之一 。 分心驾驶&#xff0c;尤其是抽烟、打电话等行为&#xff0c;是导致交通事故频发的重要因素。为了解决这一问题&#xff0c;研究人员和工程师们…

Nginx目录浏览

类似 在nginx的配置文件中的server内配置&#xff0c;想给哪个网站开启&#xff0c;就在该网站的server中配置 server {listen 81;server_name localhost;autoindex on; # 开启目录浏览功能。autoindex_exact_size off; # 显示文件大小的时候带单位location / {root …