Color Co-ordinate System プログラム
/* Color Co-ordinate System */
/* 埼玉大学 工学部 */
/* 情報システム工学科4年 */
/* 近藤研究室 */
/* 松永 政尚 */
/* 1999.2.1 */
import java.applet.Applet;
import java.awt.*;
class KV{ //各クラスで扱う変数のクラス
static int pr,pg,pb; //選択色相のRGB値
static int px,py; //彩度、明度フィールド上の選択ポイント位置
static int px2 = 80,py2 = 115;
static int update; //0=24色相環上、1=彩度、明度フィールド上
static int vals[] = new int[10]; //RGB、HLSの各値を格納
static int base; //24色相環上の位置
static int vh[] = new int[24]; //24色相環のH値
static int vl[] = new int[24]; // L
static int vs[] = new int[24]; // S
static int henka1 = 45,henka2 = 105; //類似、対照の変化量
static int choice; //チョイスメニューの位置
static int bg_r = 200,bg_g = 200,bg_b = 200; //背景色のRGB値
static int meido_d = 41; //明度差の閾値
}
class RGB{ //RGBとHLSの相互変換を行なうクラス
// from RGB & to RGB
public static double value(double n1,double n2,double hue){
if(hue<0){
hue += 360;
}
if(hue>360){
hue -= 360;
}
if(hue<60){
return n1+(n2-n1)*hue/60.;
}else if (hue<180) {
return n2;
}else if (hue<240){
return n1+(n2-n1)*(240-hue)/60.;
}else{
return n1;
}
}
// max & min ( double )
public static double max(double a, double b) {
if (a > b) {
return a;
} else {
return b;
}
}
public static double min(double a, double b) {
if (a < b) {
return a;
} else {
return b;
}
}
// max & min ( int )
public static int max2(int a, int b) {
if (a > b) {
return a;
} else {
return b;
}
}
public static int min2(int a, int b) {
if (a < b) {
return a;
} else {
return b;
}
}
public static void toRGB(int x,int y,int z){ //HLSからRGBへ
final int RED = 0;
final int GRN = 1;
final int BLU = 2;
double h,l,s;
double r,g,b;
h = x/255.*360;
l = y/255.;
s = z/255.;
double m1,m2;
if(l<.5){
m2 = l*(1+s);
}else{
m2 = l+s-l*s;
}
m1 = 2*l - m2;
if(s==0){
r=l;
g=l;
b=l;
}else{
r=value(m1,m2,h+120);
g=value(m1,m2,h);
b=value(m1,m2,h-120);
}
KV.vals[RED] = (int)(r*255);
KV.vals[GRN] = (int)(g*255);
KV.vals[BLU] = (int)(b*255);
}
public static void fromRGB(int x, int y, int z) { //RGBからHLSへ
final int H = 3;
final int L = 4;
final int S = 5;
double r,g,b;
double h,l,s;
r = x/255.;
g = y/255.;
b = z/255.;
double min = min(min(r,g),b);
double max = max(max(r,g),b);
l = (max+min)/2;
if (max==min) {
s = 0;
h = 0;
} else {
if (l<=0.5) {
s = (max-min)/(max+min);
} else {
s = (max-min)/(2-max-min);
}
double delta = max-min;
if (r==max) {
h=(g-b)/delta;
} else if (g==max) {
h=2+(b-r)/delta;
} else {
h=4+(r-g)/delta;
}
h /= 6.;
if (h<0) {
h += 1;
}
}
KV.vals[H] = (int)(h*255);
KV.vals[L] = (int)(l*255);
KV.vals[S] = (int)(s*255);
}
}
class meido{ //明度差を求めるクラス
static int l_max; //最大明度値
static int l_min; //最小明度値
static int l_d; //明度差
public static void meido_3(int x,int y,int z){ //3配色
if(x > y){
l_max = Math.max(x,z);
l_min = Math.min(y,z);
}
else{
l_max = Math.max(y,z);
l_min = Math.min(x,z);
}
l_d = l_max - l_min;
}
public static void meido_4(int x,int y,int z,int w){ //4配色
if(x > y && z > w){
l_max = Math.max(x,z);
l_min = Math.min(y,w);
}
else if(x > y && w > z){
l_max = Math.max(x,w);
l_min = Math.min(y,z);
}
else if(y > x && z > w){
l_max = Math.max(y,z);
l_min = Math.min(x,w);
}
else if(y > x && w > z){
l_max = Math.max(y,w);
l_min = Math.min(x,z);
}
l_d = l_max - l_min;
}
public static void meido_5(int x,int y,int z,int w,int v){ //5配色
if(x > y && z > w){
l_max = Math.max(x,z);
l_max = Math.max(l_max,v);
l_min = Math.min(y,w);
l_min = Math.min(l_min,v);
}
else if(x > y && w > z){
l_max = Math.max(x,w);
l_max = Math.max(l_max,v);
l_min = Math.min(y,z);
l_min = Math.min(l_min,v);
}
else if(y > x && z > w){
l_max = Math.max(y,z);
l_max = Math.max(l_max,v);
l_min = Math.min(x,w);
l_min = Math.min(l_min,v);
}
else if(y > x && w > z){
l_max = Math.max(y,w);
l_max = Math.max(l_max,v);
l_min = Math.min(x,z);
l_min = Math.min(l_min,v);
}
l_d = l_max - l_min;
}
public static void meido_6(int x,int y,int z,int w,int v,int u){ //6配色
if(x > y && z > w){
l_max = Math.max(x,z);
l_max = Math.max(l_max,v);
l_max = Math.max(l_max,u);
l_min = Math.min(y,w);
l_min = Math.min(l_min,v);
l_min = Math.min(l_min,u);
}
else if(x > y && w > z){
l_max = Math.max(x,w);
l_max = Math.max(l_max,v);
l_max = Math.max(l_max,u);
l_min = Math.min(y,z);
l_min = Math.min(l_min,v);
l_min = Math.min(l_min,u);
}
else if(y > x && z > w){
l_max = Math.max(y,z);
l_max = Math.max(l_max,v);
l_max = Math.max(l_max,u);
l_min = Math.min(x,w);
l_min = Math.min(l_min,v);
l_min = Math.min(l_min,u);
}
else if(y > x && w > z){
l_max = Math.max(y,w);
l_max = Math.max(l_max,v);
l_max = Math.max(l_max,u);
l_min = Math.min(x,z);
l_min = Math.min(l_min,v);
l_min = Math.min(l_min,u);
}
l_d = l_max - l_min;
}
}
class buttonPanel extends Panel{ //各ボタンの説明を表示
public void paint(Graphics g){
g.drawString("明度の閾値を設定(10段階)",5,15);
g.drawString("小",0,35);
g.drawString("大",175,35);
}
}
public class ColorTest extends Applet{ //配色支援システムの元締めクラス
SelectedColor sc; //カラー選択
Datehyouji dh; //データ表示
Three Three; //3配色
Four Four; //4配色
Five Five; //5配色
Six Six; //6配色
int ph = 10; //選択色相マークの開始位置
int Mvalue; //スクロールバーの明度閾値
//vr[],vg[],vb[] 24色相環のRGB値
int [] vr = {160,176,192,208,207,223,223,224,192,160,95,32,0,0,0,0,0,0,63,79,111,112,128,160,160,176,192};
int [] vg = {0,31,48,80,111,144,175,192,191,176,175,160,144,144,128,128,111,96,80,64,64,47,16,16};
int [] vb = {80,64,63,47,15,15,0,0,0,0,47,95,96,127,128,144,143,144,144,144,143,127,127,96};
final int RED = 0;
final int GRN = 1;
final int BLU = 2;
final int H = 3;
final int L = 4;
final int S = 5;
//Choiceメニュー
String items[] = {"《3配色》",
"ポルタメント(3):滑らかな効果","セクスタード(3):魅力的効果",
"オブリガード:デリケートな効果","トリオ:円満の快さ",
"近似補色配色:鮮やかな効果","《4配色》",
"ポルタメント(4):滑らかな効果","セクスタード(4):均衡的の主調効果",
"クワドラド:この上ない派手","魅力的補色対:清純な魅力",
"刺激補色対:刺激的効果","鮮やかな補色配色:鮮やかな調和感",
"完全4色調和:バランス魅力効果","《5配色》",
"ポルタメント(5):滑らかな効果","セクスタード(5):均衡的の主調効果",
"《6配色》","セクスタード(6):円満の魅力"};
Choice itemChoice = new Choice();
Scrollbar sbM = new Scrollbar(Scrollbar.HORIZONTAL,5,0,0,10);
TextField textM = new TextField("5",2);
public void init(){
//24色相環のRGB値を格納
for(int i=0; i<24 ; i=i+1){
RGB.fromRGB(vr[i],vg[i],vb[i]);
KV.vh[i] = KV.vals[H];KV.vl[i] = KV.vals[L];KV.vs[i] = KV.vals[S];
}
setLayout(null); //全体のレイアウト
resize(750,700);
//Choiceメニューのセット
for(int i = 0;i < items.length;i = i + 1){
itemChoice.addItem(items[i]);
}
buttonPanel bP = new buttonPanel();
add(bP);
bP.reshape(0,320,215,610);
bP.setLayout(null);
bP.add(sbM);
sbM.reshape(15,20,160,30);
bP.add(textM);
textM.reshape(190,20,25,30);
bP.add(itemChoice);
itemChoice.reshape(0,60,215,20);
sc = new SelectedColor();
add(sc);
sc.init();
dh = new Datehyouji();
add(dh);
dh.init();
Three = new Three();
Three.init();
Four = new Four();
Four.init();
Five = new Five();
Five.init();
Six = new Six();
Six.init();
}
public boolean handleEvent(Event evt){
//スクロールバーのイベント処理
if(evt.target instanceof Scrollbar){
if((evt.id == Event.SCROLL_ABSOLUTE)||
(evt.id == Event.SCROLL_LINE_DOWN)||
(evt.id == Event.SCROLL_LINE_UP)||
(evt.id == Event.SCROLL_PAGE_DOWN)||
(evt.id == Event.SCROLL_PAGE_UP)){
textM.setText(String.valueOf(sbM.getValue()));
Mvalue = sbM.getValue();
KV.meido_d = Mvalue + 36;
}
return true;
}
return super.handleEvent(evt);
}
public boolean action(Event evt,Object o){
//チョイスメニューのイベント処理
if(evt.target instanceof Choice){
String item = itemChoice.getSelectedItem();
if(item.equals("ポルタメント(3):滑らかな効果"))
KV.choice = 1;
else if(item.equals("セクスタード(3):魅力的効果"))
KV.choice = 2;
else if(item.equals("オブリガード:デリケートな効果"))
KV.choice = 3;
else if(item.equals("トリオ:円満の快さ"))
KV.choice = 4;
else if(item.equals("近似補色配色:鮮やかな効果"))
KV.choice = 5;
else if(item.equals("ポルタメント(4):滑らかな効果"))
KV.choice = 6;
else if(item.equals("セクスタード(4):均衡的の主調効果"))
KV.choice = 7;
else if(item.equals("クワドラド:この上ない派手"))
KV.choice = 8;
else if(item.equals("魅力的補色対:清純な魅力"))
KV.choice = 9;
else if(item.equals("刺激補色対:刺激的効果"))
KV.choice = 10;
else if(item.equals("鮮やかな補色配色:鮮やかな調和感"))
KV.choice = 11;
else if(item.equals("完全4色調和:バランス魅力効果"))
KV.choice = 12;
else if(item.equals("ポルタメント(5):滑らかな効果"))
KV.choice = 13;
else if(item.equals("セクスタード(5):均衡的の主調効果"))
KV.choice = 14;
else if(item.equals("セクスタード(6):円満の魅力"))
KV.choice = 15;
if(KV.choice == 1 || KV.choice == 2 || KV.choice == 3 || KV.choice == 4 || KV.choice == 5)
{add(Three,0);Three.repaint();}
if(KV.choice == 6 || KV.choice == 7 || KV.choice == 8 || KV.choice == 9 || KV.choice == 10 || KV.choice == 11 || KV.choice == 12 )
{add(Four,0);Four.repaint();}
if(KV.choice == 13 || KV.choice == 14)
{add(Five,0);Five.repaint();}
if(KV.choice == 15)
{add(Six,0);Six.repaint();}
return true;
}
//テキストフィールドのイベント処理
if(evt.target instanceof TextField){
int m = Integer.valueOf(textM.getText()).intValue();
m = Math.max(0,Math.min(10,m));
sbM.setValue(m);
Mvalue = m;
return true;
}
return false;
}
public void paint(Graphics g){
getAppletContext().showStatus("Color co-ordinate System");
// 背景色
g.setColor(new Color(KV.bg_r,KV.bg_g,KV.bg_b));
g.fillRect(0,0,1100,700);
g.setColor(Color.black);
g.drawString("背景色",10,295);
for(int i = 0;i < 256;i = i + 32){
g.setColor(new Color(i,i,i));
g.fillRect(10 + 5 * (i / 32),300,5,15);
}
// 24色相環
for(int i=0; i<24 ; i=i+1){
RGB.fromRGB(vr[i],vg[i],vb[i]);
RGB.toRGB(KV.vals[H],KV.vals[L],KV.vals[S]);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(10,10+i*10,25,10);
}
// 選択色相マーク
g.setColor(Color.black);
g.drawRect(5,ph,35,9);
g.setColor(Color.black);
g.drawString("色相",10,10);
// 彩度、明度フィールド
g.drawString("彩度",155,135);
g.drawString("明度",70,25);
RGB.fromRGB(KV.pr,KV.pg,KV.pb);
for(int i=0; i<255; i=i+15){
for(int j=0; j<255; j=j+15){
RGB.toRGB(KV.vals[H],j,i);
int x = KV.vals[RED];
int y = KV.vals[GRN];
int z = KV.vals[BLU];
g.setColor(new Color(x,y,z));
g.fillRect(80+(i/3),25+((255-j)/3),5,5);
}
}
// 彩度、明度フィールドにおける選択ポイント
g.setColor(Color.black);
int x1[] = {KV.px2+3,KV.px2-3,KV.px2};
int y1[] = {123,123,117};
g.fillPolygon(x1,y1,3);
int x2[] = {72,72,78};
int y2[] = {KV.py2+3,KV.py2-3,KV.py2};
g.fillPolygon(x2,y2,3);
g.setColor(Color.lightGray);
g.drawLine(KV.px2,30,KV.px2,115);
g.drawLine(80,KV.py2,165,KV.py2);
}
public void update(Graphics g){
paint(g);
}
//マウスイベントの処理
public boolean mouseDown(Event e,int x,int y){
//背景色選択区域上
if(x >= 10 && x <= 50 && y >= 300 && y <= 315){
KV.bg_r = (x - 10) * (256 / 40);
KV.bg_g = (x - 10) * (256 / 40);
KV.bg_b = (x - 10) * (256 / 40);
repaint();sc.repaint();dh.repaint();
Three.repaint();;Four.repaint();
Five.repaint();Six.repaint();
}
//24色相環上
else if(x >= 10 && x <= 35){
KV.update = 0;
if( y >= 10 && y < 20 ){
KV.pr = vr[0]; KV.pg = vg[0]; KV.pb = vb[0];
ph = 10; KV.base = 0;
repaint();sc.repaint();dh.repaint();
}
if( y >= 20 && y < 30 ){
KV.pr = vr[1]; KV.pg = vg[1]; KV.pb = vb[1];
ph = 20;KV.base = 1;
repaint();sc.repaint();dh.repaint();
}
if( y >= 30 && y < 40 ){
KV.pr = vr[2]; KV.pg = vg[2]; KV.pb = vb[2];
ph = 30; KV.base = 2;
repaint();sc.repaint();dh.repaint();
}
if( y >= 40 && y < 50 ){
KV.pr = vr[3]; KV.pg = vg[3]; KV.pb = vb[3];
ph = 40; KV.base = 3;
repaint();sc.repaint();dh.repaint();
}
if( y >= 50 && y < 60 ){
KV.pr = vr[4]; KV.pg = vg[4]; KV.pb = vb[4];
ph = 50; KV.base = 4;
repaint();sc.repaint();dh.repaint();
}
if( y >= 60 && y < 70 ){
KV.pr = vr[5]; KV.pg = vg[5]; KV.pb = vb[5];
ph = 60; KV.base = 5;
repaint();sc.repaint();dh.repaint();
}
if( y >= 70 && y < 80 ){
KV.pr = vr[6]; KV.pg = vg[6]; KV.pb = vb[6];
ph = 70; KV.base = 6;
repaint();sc.repaint();dh.repaint();
}
if( y >= 80 && y < 90 ){
KV.pr = vr[7]; KV.pg = vg[7]; KV.pb = vb[7];
ph = 80; KV.base =7;
repaint();sc.repaint();dh.repaint();
}
if( y >= 90 && y < 100 ){
KV.pr = vr[8]; KV.pg = vg[8]; KV.pb = vb[8];
ph = 90; KV.base =8;
repaint();sc.repaint();dh.repaint();
}
if( y >= 100 && y < 110 ){
KV.pr = vr[9]; KV.pg = vg[9]; KV.pb = vb[9];
ph = 100; KV.base =9;
repaint();sc.repaint();dh.repaint();
}
if( y >= 110 && y < 120 ){
KV.pr = vr[10]; KV.pg = vg[10]; KV.pb = vb[10];
ph = 110; KV.base =10;
repaint();sc.repaint();dh.repaint();
}
if( y >= 120 && y < 130 ){
KV.pr = vr[11]; KV.pg = vg[11]; KV.pb = vb[11];
ph = 120; KV.base =11;
repaint();sc.repaint();dh.repaint();
}
if( y >= 130 && y < 140 ){
KV.pr = vr[12]; KV.pg = vg[12]; KV.pb = vb[12];
ph = 130; KV.base =12;
repaint();sc.repaint();dh.repaint();
}
if( y >= 140 && y < 150 ){
KV.pr = vr[13]; KV.pg = vg[13]; KV.pb = vb[13];
ph = 140; KV.base =13;
repaint();sc.repaint();dh.repaint();
}
if( y >= 150 && y < 160 ){
KV.pr = vr[14]; KV.pg = vg[14]; KV.pb = vb[14];
ph = 150; KV.base =14;
repaint();sc.repaint();dh.repaint();
}
if( y >= 160 && y < 170 ){
KV.pr = vr[15]; KV.pg = vg[15]; KV.pb = vb[15];
ph = 160; KV.base =15;
repaint();sc.repaint();dh.repaint();
}
if( y >= 170 && y < 180 ){
KV.pr = vr[16]; KV.pg = vg[16]; KV.pb = vb[16];
ph = 170; KV.base =16;
repaint();sc.repaint();dh.repaint();
}
if( y >= 180 && y < 190 ){
KV.pr = vr[17]; KV.pg = vg[17]; KV.pb = vb[17];
ph = 180; KV.base =17;
repaint();sc.repaint();dh.repaint();
}
if( y >= 190 && y < 200 ){
KV.pr = vr[18]; KV.pg = vg[18]; KV.pb = vb[18];
ph = 190; KV.base =18;
repaint();sc.repaint();dh.repaint();
}
if( y >= 200 && y < 210 ){
KV.pr = vr[19]; KV.pg = vg[19]; KV.pb = vb[19];
ph = 200; KV.base =19;
repaint();sc.repaint();dh.repaint();
}
if( y >= 210 && y < 220 ){
KV.pr = vr[20]; KV.pg = vg[20]; KV.pb = vb[20];
ph = 210; KV.base =20;
repaint();sc.repaint();dh.repaint();
}
if( y >= 220 && y < 230 ){
KV.pr = vr[21]; KV.pg = vg[21]; KV.pb = vb[21];
ph = 220; KV.base =21;
repaint();sc.repaint();dh.repaint();
}
if( y >= 230 && y < 240 ){
KV.pr = vr[22]; KV.pg = vg[22]; KV.pb = vb[22];
ph = 230; KV.base =22;
repaint();sc.repaint();dh.repaint();
}
if( y >= 240 && y < 250 ){
KV.pr = vr[23]; KV.pg = vg[23]; KV.pb = vb[23];
ph = 240; KV.base =23;
repaint();sc.repaint();dh.repaint();
}
//チョイスメニュー上
if(KV.choice == 1 || KV.choice == 2 || KV.choice == 3 || KV.choice == 4 || KV.choice == 5)
{add(Three,0);Three.repaint();}
if(KV.choice == 6 || KV.choice == 7 || KV.choice == 8 || KV.choice == 9 || KV.choice == 10 || KV.choice == 11 || KV.choice == 12 )
{add(Four,0);Four.repaint();}
if(KV.choice == 13 || KV.choice == 14)
{add(Five,0);Five.repaint();}
if(KV.choice == 15)
{add(Six,0);Six.repaint();}
}
//彩度、明度フィールド上
else if( x >= 80 && x <= 80+85 && y >= 30 && y <= 115){
KV.px = (x - 80) * 3;
KV.py = 255 - (y - 30) * 3;
KV.px2 = x;
KV.py2 = y;
KV.update = 1;
repaint();dh.repaint();sc.repaint();
Three.repaint();Four.repaint();Five.repaint();Six.repaint();
}
return true;
}
public boolean mouseDrag(Event e,int x,int y){
//背景色選択区域上
if(x >= 10 && x <= 50 && y >= 300 && y <= 315){
KV.bg_r = (x - 10) * (256 / 40);
KV.bg_g = (x - 10) * (256 / 40);
KV.bg_b = (x - 10) * (256 / 40);
repaint();sc.repaint();dh.repaint();
Three.repaint();;Four.repaint();
Five.repaint();Six.repaint();
}
//24色相環上
else if(x >= 10 && x <= 35){
KV.update = 0;
if( y >= 10 && y < 20 ){
KV.pr = vr[0]; KV.pg = vg[0]; KV.pb = vb[0];
ph = 10; KV.base = 0;
repaint();sc.repaint();dh.repaint();
}
if( y >= 20 && y < 30 ){
KV.pr = vr[1]; KV.pg = vg[1]; KV.pb = vb[1];
ph = 20; KV.base = 1;
repaint();sc.repaint();dh.repaint();
}
if( y >= 30 && y < 40 ){
KV.pr = vr[2]; KV.pg = vg[2]; KV.pb = vb[2];
ph = 30; KV.base = 2;
repaint();sc.repaint();dh.repaint();
}
if( y >= 40 && y < 50 ){
KV.pr = vr[3]; KV.pg = vg[3]; KV.pb = vb[3];
ph = 40; KV.base = 3;
repaint();sc.repaint();dh.repaint();
}
if( y >= 50 && y < 60 ){
KV.pr = vr[4]; KV.pg = vg[4]; KV.pb = vb[4];
ph = 50; KV.base = 4;
repaint();sc.repaint();dh.repaint();
}
if( y >= 60 && y < 70 ){
KV.pr = vr[5]; KV.pg = vg[5]; KV.pb = vb[5];
ph = 60; KV.base = 5;
repaint();sc.repaint();dh.repaint();
}
if( y >= 70 && y < 80 ){
KV.pr = vr[6]; KV.pg = vg[6]; KV.pb = vb[6];
ph = 70; KV.base = 6;
repaint();sc.repaint();dh.repaint();
}
if( y >= 80 && y < 90 ){
KV.pr = vr[7]; KV.pg = vg[7]; KV.pb = vb[7];
ph = 80; KV.base =7;
repaint();sc.repaint();dh.repaint();
}
if( y >= 90 && y < 100 ){
KV.pr = vr[8]; KV.pg = vg[8]; KV.pb = vb[8];
ph = 90; KV.base =8;
repaint();sc.repaint();dh.repaint();
}
if( y >= 100 && y < 110 ){
KV.pr = vr[9]; KV.pg = vg[9]; KV.pb = vb[9];
ph = 100; KV.base =9;
repaint();sc.repaint();dh.repaint();
}
if( y >= 110 && y < 120 ){
KV.pr = vr[10]; KV.pg = vg[10]; KV.pb = vb[10];
ph = 110; KV.base =10;
repaint();sc.repaint();dh.repaint();
}
if( y >= 120 && y < 130 ){
KV.pr = vr[11]; KV.pg = vg[11]; KV.pb = vb[11];
ph = 120; KV.base =11;
repaint();sc.repaint();dh.repaint();
}
if( y >= 130 && y < 140 ){
KV.pr = vr[12]; KV.pg = vg[12]; KV.pb = vb[12];
ph = 130; KV.base =12;
repaint();sc.repaint();dh.repaint();
}
if( y >= 140 && y < 150 ){
KV.pr = vr[13]; KV.pg = vg[13]; KV.pb = vb[13];
ph = 140; KV.base =13;
repaint();sc.repaint();dh.repaint();
}
if( y >= 150 && y < 160 ){
KV.pr = vr[14]; KV.pg = vg[14]; KV.pb = vb[14];
ph = 150; KV.base =14;
repaint();sc.repaint();dh.repaint();
}
if( y >= 160 && y < 170 ){
KV.pr = vr[15]; KV.pg = vg[15]; KV.pb = vb[15];
ph = 160; KV.base =15;
repaint();sc.repaint();dh.repaint();
}
if( y >= 170 && y < 180 ){
KV.pr = vr[16]; KV.pg = vg[16]; KV.pb = vb[16];
ph = 170; KV.base =16;
repaint();sc.repaint();dh.repaint();
}
if( y >= 180 && y < 190 ){
KV.pr = vr[17]; KV.pg = vg[17]; KV.pb = vb[17];
ph = 180; KV.base =17;
repaint();sc.repaint();dh.repaint();
}
if( y >= 190 && y < 200 ){
KV.pr = vr[18]; KV.pg = vg[18]; KV.pb = vb[18];
ph = 190; KV.base =18;
repaint();sc.repaint();dh.repaint();
}
if( y >= 200 && y < 210 ){
KV.pr = vr[19]; KV.pg = vg[19]; KV.pb = vb[19];
ph = 200; KV.base =19;
repaint();sc.repaint();dh.repaint();
}
if( y >= 210 && y < 220 ){
KV.pr = vr[20]; KV.pg = vg[20]; KV.pb = vb[20];
ph = 210; KV.base =20;
repaint();sc.repaint();dh.repaint();
}
if( y >= 220 && y < 230 ){
KV.pr = vr[21]; KV.pg = vg[21]; KV.pb = vb[21];
ph = 220; KV.base =21;
repaint();sc.repaint();dh.repaint();
}
if( y >= 230 && y < 240 ){
KV.pr = vr[22]; KV.pg = vg[22]; KV.pb = vb[22];
ph = 230; KV.base =22;
repaint();sc.repaint();dh.repaint();
}
if( y >= 240 && y < 250 ){
KV.pr = vr[23]; KV.pg = vg[23]; KV.pb = vb[23];
ph = 240; KV.base =23;
repaint();sc.repaint();dh.repaint();
}
//チョイスメニュー上
if(KV.choice == 1 || KV.choice == 2 || KV.choice == 3 || KV.choice == 4 || KV.choice == 5)
{add(Three,0);Three.repaint();}
if(KV.choice == 6 || KV.choice == 7 || KV.choice == 8 || KV.choice == 9 || KV.choice == 10 || KV.choice == 11 || KV.choice == 12 )
{add(Four,0);Four.repaint();}
if(KV.choice == 13 || KV.choice == 14)
{add(Five,0);Five.repaint();}
if(KV.choice == 15)
{add(Six,0);Six.repaint();}
}
//彩度、明度フィールド上
else if( x >= 80 && x <= 80+85 && y >= 30 && y <= 115){
KV.px = (x - 80) * 3;
KV.py = 255 - (y - 30) * 3;
KV.px2 = x;
KV.py2 = y;
KV.update = 1;
repaint();dh.repaint();sc.repaint();
Three.repaint();Four.repaint();Five.repaint();Six.repaint();
}
return true;
}
}
class SelectedColor extends Panel{ //選択色に関するクラス
final int RED = 0;
final int GRN = 1;
final int BLU = 2;
final int H = 3;
final int L = 4;
final int S = 5;
public void init(){
reshape(105,145,40,55);
}
public void paint(Graphics g){
// selected color (vivid)
setBackground(new Color(KV.bg_r,KV.bg_g,KV.bg_b));
g.setColor(Color.black);
g.drawString("選択色",0,12);
//24色相環上
if(KV.update == 0){
RGB.fromRGB(KV.pr,KV.pg,KV.pb);
RGB.toRGB(KV.vals[H],KV.vals[L],KV.vals[S]);
int x = KV.vals[RED];
int y = KV.vals[GRN];
int z = KV.vals[BLU];
g.setColor(new Color(x,y,z));
g.fillRect(0,15,40,40);
KV.px2 = (KV.vals[S]/3) + 80;
KV.py2 = 30 - ((KV.vals[L]-255)/3);
}
//彩度、明度フィールド上
else if(KV.update == 1){
KV.vals[L] = KV.py; KV.vals[S] = KV.px;
RGB.toRGB(KV.vals[H],KV.vals[L],KV.vals[S]);
int x = KV.vals[RED];
int y = KV.vals[GRN];
int z = KV.vals[BLU];
g.setColor(new Color(x,y,z));
g.fillRect(0,15,40,40);
}
}
public void update(Graphics g){
paint(g);
}
}
class Datehyouji extends Panel{ //データ表示パネルクラス
String sH;
String sL;
String sS;
String sR;
String sG;
String sB;
final int RED = 0;
final int GRN = 1;
final int BLU = 2;
final int H = 3;
final int L = 4;
final int S = 5;
int DHvals[] = new int[10];
public void init(){
reshape(75, 205, 107, 90);
}
public void paint(Graphics g)
{
setBackground(new Color(KV.bg_r,KV.bg_g,KV.bg_b));
g.setColor(Color.white);
g.fillRect(0, 10, 50, 80);
g.setColor(Color.black);
if (KV.update == 1)
{
fromRGB(KV.pr, KV.pg, KV.pb);
toRGB(DHvals[3], KV.py, KV.px);
sH = Integer.toString(DHvals[3]);
sL = Integer.toString(KV.py);
sS = Integer.toString(KV.px);
}
if (KV.update == 0)
{
fromRGB(KV.pr, KV.pg, KV.pb);
toRGB(DHvals[3], DHvals[4], DHvals[5]);
sH = Integer.toString(DHvals[3]);
sL = Integer.toString(DHvals[4]);
sS = Integer.toString(DHvals[5]);
}
g.drawString("h :", 5, 50);
g.drawString("l :", 5, 65);
g.drawString("s :", 5, 80);
g.drawString("HLS", 5, 25);
g.drawString(sH, 25, 50);
g.drawString(sL, 25, 65);
g.drawString(sS, 25, 80);
g.setColor(Color.white);
g.fillRect(55, 10, 50, 80);
g.setColor(Color.black);
sR = Integer.toString(DHvals[0]);
sG = Integer.toString(DHvals[1]);
sB = Integer.toString(DHvals[2]);
g.drawString("r :", 60, 50);
g.drawString("g :", 60, 65);
g.drawString("b :", 60, 80);
g.drawString("RGB", 60, 25);
g.drawString(sR, 80, 50);
g.drawString(sG, 80, 65);
g.drawString(sB, 80, 80);
g.drawString("選択色カラーデータ", 0, 11);
}
public void update(Graphics g){
paint(g);
}
// from RGB & to RGB
public double value(double n1,double n2,double hue){
if(hue<0){
hue += 360;
}
if(hue>360){
hue -= 360;
}
if(hue<60){
return n1+(n2-n1)*hue/60.;
}else if (hue<180) {
return n2;
}else if (hue<240){
return n1+(n2-n1)*(240-hue)/60.;
}else{
return n1;
}
}
// max & min ( double )
public double max(double a, double b) {
if (a > b) {
return a;
} else {
return b;
}
}
public double min(double a, double b) {
if (a < b) {
return a;
} else {
return b;
}
}
// max & min ( int )
public int max2(int a, int b) {
if (a > b) {
return a;
} else {
return b;
}
}
public int min2(int a, int b) {
if (a < b) {
return a;
} else {
return b;
}
}
public void toRGB(int x,int y,int z){
double h,l,s;
double r,g,b;
h = x/255.*360;
l = y/255.;
s = z/255.;
double m1,m2;
if(l<.5){
m2 = l*(1+s);
}else{
m2 = l+s-l*s;
}
m1 = 2*l - m2;
if(s==0){
r=l;
g=l;
b=l;
}else{
r=value(m1,m2,h+120);
g=value(m1,m2,h);
b=value(m1,m2,h-120);
}
DHvals[RED] = (int)(r*255);
DHvals[GRN] = (int)(g*255);
DHvals[BLU] = (int)(b*255);
}
public void fromRGB(int x, int y, int z) {
double r,g,b;
double h,l,s;
r = x/255.;
g = y/255.;
b = z/255.;
double min = min(min(r,g),b);
double max = max(max(r,g),b);
l = (max+min)/2;
if (max==min) {
s = 0;
h = 0;
} else {
if (l<=0.5) {
s = (max-min)/(max+min);
} else {
s = (max-min)/(2-max-min);
}
double delta = max-min;
if (r==max) {
h=(g-b)/delta;
} else if (g==max) {
h=2+(b-r)/delta;
} else {
h=4+(r-g)/delta;
}
h /= 6.;
if (h<0) {
h += 1;
}
}
DHvals[H] = (int)(h*255);
DHvals[L] = (int)(l*255);
DHvals[S] = (int)(s*255);
}
}
class Three extends Panel{
int r1,r2,r3,r4,a1,b1,S1,L1;
int l[] = new int[6];
final int RED = 0;
final int GRN = 1;
final int BLU = 2;
final int H = 3;
final int L = 4;
final int S = 5;
int kakudo1,kakudo2,kakudo3,kakudo4;
public void init(){
reshape(220,0,450,700);
}
public void paint(Graphics g){
if(KV.choice ==1 ||KV.choice == 2 ||KV.choice == 4 ||KV.choice == 5){
if(KV.choice == 1){
r1 = KV.base + 2;
r2 = KV.base + 22;
kakudo1 = 30;
kakudo2 = 30;
}
else if(KV.choice == 2){
r1 = KV.base + 4;
r2 = KV.base + 20;
kakudo1 = 60;
kakudo2 = 60;
}
else if(KV.choice == 4){
r1 = KV.base + 8;
r2 = KV.base + 16;
kakudo1 = 120;
kakudo2 = 120;
}
else if(KV.choice == 5){
r1 = KV.base + 10;
r2 = KV.base + 14;
kakudo1 = 150;
kakudo2 = 150;
}
// Result1(vivid)
setBackground(new Color(KV.bg_r,KV.bg_g,KV.bg_b));
g.setColor(Color.black);
g.drawString("色相",0,20);
g.drawString("base",115,15);
String angle3 = Integer.toString(kakudo1);
g.drawString(angle3,80,15);
String angle4 = Integer.toString(kakudo2);
g.drawString(angle4,160,15);
RGB.toRGB(KV.vh[KV.base],KV.vl[KV.base],KV.vs[KV.base]);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(110,20,40,40);
l[0] = KV.vl[KV.base];
if(r1 >= 24){
r1 = r1 - 24;
}
RGB.toRGB(KV.vh[r1],KV.vl[r1],KV.vs[r1]);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(110+40,20,40,40);
l[1] = KV.vl[r1];
if(r2 >= 24){
r2 = r2 - 24;
}
RGB.toRGB(KV.vh[r2],KV.vl[r2],KV.vs[r2]);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(110-40,20,40,40);
l[2] = KV.vl[r2];
meido.meido_3(l[0],l[1],l[2]);
// Result2(saturation & lightness : identical)
g.setColor(Color.black);
g.drawString("彩度 & 明度",0,80);
g.drawString(": 同一",0,95);
RGB.toRGB(KV.vals[H],KV.vals[L],KV.vals[S]);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(110,75,40,40);
if(r1 >= 24){
r1 = r1 - 24;
}
RGB.toRGB(KV.vh[r1],KV.vals[L],KV.vals[S]);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(110+40,75,40,40);
if(r2 >= 24){
r2 = r2 - 24;
}
RGB.toRGB(KV.vh[r2],KV.vals[L],KV.vals[S]);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(110-40,75,40,40);
// Result3(saturation : similar)
g.setColor(Color.black);
g.drawString("彩度 : 類似",0,135);
a1 = KV.vals[S] + KV.henka1;
b1 = KV.vals[S] - KV.henka1;
if(a1 >= 256){
S1 = KV.vals[S] - (a1- 255);
}else if(b1 < 0 ){
S1 = KV.vals[S] + (KV.henka1 - KV.vals[S]);
}else{
S1 = KV.vals[S];
}
// part1
RGB.toRGB(KV.vals[H],KV.vals[L],S1);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(110,130,40,40);
if(r1 >= 24){
r1 = r1 - 24;
}
RGB.toRGB(KV.vh[r1],KV.vals[L],S1+KV.henka1);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(110+40,130,40,40);
if(r2 >= 24){
r2 = r2 - 24;
}
RGB.toRGB(KV.vh[r2],KV.vals[L],S1-KV.henka1);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(110-40,130,40,40);
// part2
RGB.toRGB(KV.vals[H],KV.vals[L],S1);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(110,175,40,40);
if(r1 >= 24){
r1 = r1 - 24;
}
RGB.toRGB(KV.vh[r1],KV.vals[L],S1-KV.henka1);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(110+40,175,40,40);
if(r2 >= 24){
r2 = r2 - 24;
}
RGB.toRGB(KV.vh[r2],KV.vals[L],S1+KV.henka1);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(110-40,175,40,40);
// Result3(lightness : similar)
g.setColor(Color.black);
g.drawString("明度 : 類似",0,335);
a1 = KV.vals[L] + KV.henka1;
b1 = KV.vals[L] - KV.henka1;
if(a1 >= 256){
L1 = KV.vals[L] - (a1- 255);
}else if(b1 < 0 ){
L1 = KV.vals[L] + (KV.henka1 - KV.vals[L]);
}else{
L1 = KV.vals[L];
}
// part1
RGB.toRGB(KV.vals[H],L1,KV.vals[S]);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(110,330,40,40);
if(r1 >= 24){
r1 = r1 - 24;
}
RGB.toRGB(KV.vh[r1],L1+KV.henka1,KV.vals[S]);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(110+40,330,40,40);
if(r2 >= 24){
r2 = r2 - 24;
}
RGB.toRGB(KV.vh[r2],L1-KV.henka1,KV.vals[S]);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(110-40,330,40,40);
// part2
RGB.toRGB(KV.vals[H],L1,KV.vals[S]);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(110,375,40,40);
if(r1 >= 24){
r1 = r1 - 24;
}
RGB.toRGB(KV.vh[r1],L1-KV.henka1,KV.vals[S]);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(110+40,375,40,40);
if(r2 >= 24){
r2 = r2 - 24;
}
RGB.toRGB(KV.vh[r2],L1+KV.henka1,KV.vals[S]);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(110-40,375,40,40);
// Result4(saturation ; contrast)
g.setColor(Color.black);
g.drawString("彩度 : 対照",0,235);
a1 = KV.vals[S] + KV.henka2;
b1 = KV.vals[S] - KV.henka2;
if(a1 >= 256){
S1 = KV.vals[S] - (a1- 255);
}else if(b1 < 0 ){
S1 = KV.vals[S] + (KV.henka2 - KV.vals[S]);
}else{
S1 = KV.vals[S];
}
// part1
RGB.toRGB(KV.vals[H],KV.vals[L],S1);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(110,230,40,40);
if(r1 >= 24){
r1 = r1 - 24;
}
RGB.toRGB(KV.vh[r1],KV.vals[L],S1+KV.henka2);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(110+40,230,40,40);
if(r2 >= 24){
r2 = r2 - 24;
}
RGB.toRGB(KV.vh[r2],KV.vals[L],S1-KV.henka2);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(110-40,230,40,40);
// part2
RGB.toRGB(KV.vals[H],KV.vals[L],S1);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(110,275,40,40);
if(r1 >= 24){
r1 = r1 - 24;
}
RGB.toRGB(KV.vh[r1],KV.vals[L],S1-KV.henka2);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(110+40,275,40,40);
if(r2 >= 24){
r2 = r2 - 24;
}
RGB.toRGB(KV.vh[r2],KV.vals[L],S1+KV.henka2);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(110-40,275,40,40);
// Result4(lightness ; contrast)
g.setColor(Color.black);
g.drawString("明度 : 対照",0,435);
a1 = KV.vals[L] + KV.henka2;
b1 = KV.vals[L] - KV.henka2;
if(a1 >= 256){
L1 = KV.vals[L] - (a1- 255);
}else if(b1 < 0 ){
L1 = KV.vals[L] + (KV.henka2 - KV.vals[L]);
}else{
L1 = KV.vals[L];
}
// part1
RGB.toRGB(KV.vals[H],L1,KV.vals[S]);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(110,430,40,40);
if(r1 >= 24){
r1 = r1 - 24;
}
RGB.toRGB(KV.vh[r1],L1+KV.henka2,KV.vals[S]);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(110+40,430,40,40);
if(r2 >= 24){
r2 = r2 - 24;
}
RGB.toRGB(KV.vh[r2],L1-KV.henka2,KV.vals[S]);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(110-40,430,40,40);
// part2
RGB.toRGB(KV.vals[H],L1,KV.vals[S]);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(110,475,40,40);
if(r1 >= 24){
r1 = r1 - 24;
}
RGB.toRGB(KV.vh[r1],L1-KV.henka2,KV.vals[S]);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(110+40,475,40,40);
if(r2 >= 24){
r2 = r2 - 24;
}
RGB.toRGB(KV.vh[r2],L1+KV.henka2,KV.vals[S]);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(110-40,475,40,40);
/***** 類似&対照を考慮 *****/
int aL,bL,aS,bS,hhL=0,hhS=0;
if(KV.choice == 1||KV.choice == 2){
if(meido.l_d > KV.meido_d){
hhL = KV.henka2;hhS = KV.henka1;
}
else{
hhL = KV.henka1;hhS = KV.henka2;
}
}
if(KV.choice == 4||KV.choice == 5){
if(meido.l_d > KV.meido_d){
hhL = KV.henka2;hhS = KV.henka1;
}
else{
hhL = KV.henka1;hhS = KV.henka1;
}
}
g.setColor(Color.black);
g.drawString("調和",0,535);
aL = KV.vals[L] + hhL;
bL = KV.vals[L] - hhL;
aS = KV.vals[S] + hhS;
bS = KV.vals[S] - hhS;
if(aL >= 256){
L1 = KV.vals[L] - (aL - 255);
}else if(bL < 0 ){
L1 = KV.vals[L] + (hhL - KV.vals[L]);
}else{
L1 = KV.vals[L];
}
if(aS >= 256){
S1 = KV.vals[S] - (aS - 255);
}else if(bS < 0 ){
S1 = KV.vals[S] + (hhS - KV.vals[S]);
}else{
S1 = KV.vals[S];
}
// part1
RGB.toRGB(KV.vals[H],L1,S1);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(110,530,40,40);
if(r1 >= 24){
r1 = r1 - 24;
}
RGB.toRGB(KV.vh[r1],L1+hhL,S1+hhS);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(110+40,530,40,40);
if(r2 >= 24){
r2 = r2 - 24;
}
RGB.toRGB(KV.vh[r2],L1-hhL,S1-hhS);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(110-40,530,40,40);
// part2
RGB.toRGB(KV.vals[H],L1,S1);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(110,575,40,40);
if(r1 >= 24){
r1 = r1 - 24;
}
RGB.toRGB(KV.vh[r1],L1-hhL,S1-hhS);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(110+40,575,40,40);
if(r2 >= 24){
r2 = r2 - 24;
}
RGB.toRGB(KV.vh[r2],L1+hhL,S1+hhS);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(110-40,575,40,40);
/***************************************/
}
else if(KV.choice == 3){
r1 = KV.base + 4;
r2 = KV.base + 12;
r3 = KV.base + 12;
r4 = KV.base + 20;
kakudo1 = 180;
kakudo2 = 60;
kakudo3 = 60;
kakudo4 = 180;
// Result1-1(vivid)
setBackground(new Color(KV.bg_r,KV.bg_g,KV.bg_b));
g.setColor(Color.black);
g.drawString("色相",0,20);
g.drawString("base",115,15);
String angle1 = Integer.toString(kakudo1);
g.drawString(angle1,80,15);
String angle2 = Integer.toString(kakudo2);
g.drawString(angle2,160,15);
RGB.toRGB(KV.vh[KV.base],KV.vl[KV.base],KV.vs[KV.base]);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(110,20,40,40);
l[0] = KV.vl[KV.base];
if(r1 >= 24){
r1 = r1 - 24;
}
RGB.toRGB(KV.vh[r1],KV.vl[r1],KV.vs[r1]);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(110+40,20,40,40);
l[1] = KV.vl[r1];
if(r2 >= 24){
r2 = r2 - 24;
}
RGB.toRGB(KV.vh[r2],KV.vl[r2],KV.vs[r2]);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(110-40,20,40,40);
l[2] = KV.vl[r2];
meido.meido_3(l[0],l[1],l[2]);
// Result1-2(saturation & lightness : identical)
g.setColor(Color.black);
g.drawString("彩度 & 明度 ",0,80);
g.drawString(":同一",0,95);
RGB.toRGB(KV.vals[H],KV.vals[L],KV.vals[S]);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(110,75,40,40);
if(r1 >= 24){
r1 = r1 - 24;
}
RGB.toRGB(KV.vh[r1],KV.vals[L],KV.vals[S]);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(110+40,75,40,40);
if(r2 >= 24){
r2 = r2 - 24;
}
RGB.toRGB(KV.vh[r2],KV.vals[L],KV.vals[S]);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(110-40,75,40,40);
// Result1-3(saturation : similar)
g.setColor(Color.black);
g.drawString("彩度 : 類似",0,135);
a1 = KV.vals[S] + KV.henka1;
b1 = KV.vals[S] - KV.henka1;
if(a1 >= 256){
S1 = KV.vals[S] - (a1- 255);
}else if(b1 < 0 ){
S1 = KV.vals[S] + (KV.henka1 - KV.vals[S]);
}else{
S1 = KV.vals[S];
}
// part1
RGB.toRGB(KV.vals[H],KV.vals[L],S1);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(110,130,40,40);
if(r1 >= 24){
r1 = r1 - 24;
}
RGB.toRGB(KV.vh[r1],KV.vals[L],S1+KV.henka1);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(110+40,130,40,40);
if(r2 >= 24){
r2 = r2 - 24;
}
RGB.toRGB(KV.vh[r2],KV.vals[L],S1-KV.henka1);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(110-40,130,40,40);
// part2
RGB.toRGB(KV.vals[H],KV.vals[L],S1);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(110,175,40,40);
if(r1 >= 24){
r1 = r1 - 24;
}
RGB.toRGB(KV.vh[r1],KV.vals[L],S1-KV.henka1);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(110+40,175,40,40);
if(r2 >= 24){
r2 = r2 - 24;
}
RGB.toRGB(KV.vh[r2],KV.vals[L],S1+KV.henka1);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(110-40,175,40,40);
// Result1-3(lightness : similar)
g.setColor(Color.black);
g.drawString("明度 : 類似",0,335);
a1 = KV.vals[L] + KV.henka1;
b1 = KV.vals[L] - KV.henka1;
if(a1 >= 256){
L1 = KV.vals[L] - (a1- 255);
}else if(b1 < 0 ){
L1 = KV.vals[L] + (KV.henka1 - KV.vals[L]);
}else{
L1 = KV.vals[L];
}
// part1
RGB.toRGB(KV.vals[H],L1,KV.vals[S]);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(110,330,40,40);
if(r1 >= 24){
r1 = r1 - 24;
}
RGB.toRGB(KV.vh[r1],L1+KV.henka1,KV.vals[S]);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(110+40,330,40,40);
if(r2 >= 24){
r2 = r2 - 24;
}
RGB.toRGB(KV.vh[r2],L1-KV.henka1,KV.vals[S]);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(110-40,330,40,40);
// part2
RGB.toRGB(KV.vals[H],L1,KV.vals[S]);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(110,375,40,40);
if(r1 >= 24){
r1 = r1 - 24;
}
RGB.toRGB(KV.vh[r1],L1-KV.henka1,KV.vals[S]);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(110+40,375,40,40);
if(r2 >= 24){
r2 = r2 - 24;
}
RGB.toRGB(KV.vh[r2],L1+KV.henka1,KV.vals[S]);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(110-40,375,40,40);
// Result1-4(saturation ; contrast)
g.setColor(Color.black);
g.drawString("彩度 : 対照",0,235);
a1 = KV.vals[S] + KV.henka2;
b1 = KV.vals[S] - KV.henka2;
if(a1 >= 256){
S1 = KV.vals[S] - (a1- 255);
}else if(b1 < 0 ){
S1 = KV.vals[S] + (KV.henka2 - KV.vals[S]);
}else{
S1 = KV.vals[S];
}
// part1
RGB.toRGB(KV.vals[H],KV.vals[L],S1);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(110,230,40,40);
if(r1 >= 24){
r1 = r1 - 24;
}
RGB.toRGB(KV.vh[r1],KV.vals[L],S1+KV.henka2);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(110+40,230,40,40);
if(r2 >= 24){
r2 = r2 - 24;
}
RGB.toRGB(KV.vh[r2],KV.vals[L],S1-KV.henka2);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(110-40,230,40,40);
// part2
RGB.toRGB(KV.vals[H],KV.vals[L],S1);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(110,275,40,40);
if(r1 >= 24){
r1 = r1 - 24;
}
RGB.toRGB(KV.vh[r1],KV.vals[L],S1-KV.henka2);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(110+40,275,40,40);
if(r2 >= 24){
r2 = r2 - 24;
}
RGB.toRGB(KV.vh[r2],KV.vals[L],S1+KV.henka2);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(110-40,275,40,40);
// Result1-4(lightness ; contrast)
g.setColor(Color.black);
g.drawString("明度 : 対照",0,435);
a1 = KV.vals[L] + KV.henka2;
b1 = KV.vals[L] - KV.henka2;
if(a1 >= 256){
L1 = KV.vals[L] - (a1- 255);
}else if(b1 < 0 ){
L1 = KV.vals[L] + (KV.henka2 - KV.vals[L]);
}else{
L1 = KV.vals[L];
}
// part1
RGB.toRGB(KV.vals[H],L1,KV.vals[S]);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(110,430,40,40);
if(r1 >= 24){
r1 = r1 - 24;
}
RGB.toRGB(KV.vh[r1],L1+KV.henka2,KV.vals[S]);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(110+40,430,40,40);
if(r2 >= 24){
r2 = r2 - 24;
}
RGB.toRGB(KV.vh[r2],L1-KV.henka2,KV.vals[S]);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(110-40,430,40,40);
// part2
RGB.toRGB(KV.vals[H],L1,KV.vals[S]);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(110,475,40,40);
if(r1 >= 24){
r1 = r1 - 24;
}
RGB.toRGB(KV.vh[r1],L1-KV.henka2,KV.vals[S]);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(110+40,475,40,40);
if(r2 >= 24){
r2 = r2 - 24;
}
RGB.toRGB(KV.vh[r2],L1+KV.henka2,KV.vals[S]);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(110-40,475,40,40);
/***** 類似&対照を考慮 *****/
int aL,bL,aS,bS,hhL=0,hhS=0;
if(meido.l_d > KV.meido_d){
hhL = KV.henka2;hhS = KV.henka1;
}
else{
hhL = KV.henka1;hhS = KV.henka1;
}
g.setColor(Color.black);
g.drawString("調和",0,535);
aL = KV.vals[L] + hhL;
bL = KV.vals[L] - hhL;
aS = KV.vals[S] + hhS;
bS = KV.vals[S] - hhS;
if(aL >= 256){
L1 = KV.vals[L] - (aL - 255);
}else if(bL < 0 ){
L1 = KV.vals[L] + (hhL - KV.vals[L]);
}else{
L1 = KV.vals[L];
}
if(aS >= 256){
S1 = KV.vals[S] - (aS - 255);
}else if(bS < 0 ){
S1 = KV.vals[S] + (hhS - KV.vals[S]);
}else{
S1 = KV.vals[S];
}
// part1
RGB.toRGB(KV.vals[H],L1,S1);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(110,530,40,40);
if(r1 >= 24){
r1 = r1 - 24;
}
RGB.toRGB(KV.vh[r1],L1+hhL,S1+hhS);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(110+40,530,40,40);
if(r2 >= 24){
r2 = r2 - 24;
}
RGB.toRGB(KV.vh[r2],L1-hhL,S1-hhS);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(110-40,530,40,40);
// part2
RGB.toRGB(KV.vals[H],L1,S1);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(110,575,40,40);
if(r1 >= 24){
r1 = r1 - 24;
}
RGB.toRGB(KV.vh[r1],L1-hhL,S1-hhS);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(110+40,575,40,40);
if(r2 >= 24){
r2 = r2 - 24;
}
RGB.toRGB(KV.vh[r2],L1+hhL,S1+hhS);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(110-40,575,40,40);
/***************************************/
// Result( 60 - 0 - 180 )
// Result2-1(vivid)
g.setColor(Color.black);
g.drawString("base",295,15);
String angle3 = Integer.toString(kakudo3);
g.drawString(angle3,260,15);
String angle4 = Integer.toString(kakudo4);
g.drawString(angle4,340,15);
RGB.toRGB(KV.vh[KV.base],KV.vl[KV.base],KV.vs[KV.base]);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(290,20,40,40);
l[0] = KV.vl[KV.base];
if(r3 >= 24){
r3 = r3 - 24;
}
RGB.toRGB(KV.vh[r3],KV.vl[r3],KV.vs[r3]);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(290+40,20,40,40);
l[1] = KV.vl[r3];
if(r4 >= 24){
r4 = r4 - 24;
}
RGB.toRGB(KV.vh[r4],KV.vl[r4],KV.vs[r4]);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(290-40,20,40,40);
l[2] = KV.vl[r4];
meido.meido_3(l[0],l[1],l[2]);
// Result2-2(saturation & lightness : identical)
RGB.toRGB(KV.vals[H],KV.vals[L],KV.vals[S]);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(290,75,40,40);
if(r3 >= 24){
r3 = r3 - 24;
}
RGB.toRGB(KV.vh[r3],KV.vals[L],KV.vals[S]);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(290+40,75,40,40);
if(r4 >= 24){
r4 = r4 - 24;
}
RGB.toRGB(KV.vh[r4],KV.vals[L],KV.vals[S]);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(290-40,75,40,40);
// Result2-3(saturation : similar)
a1 = KV.vals[S] + KV.henka1;
b1 = KV.vals[S] - KV.henka1;
if(a1 >= 256){
S1 = KV.vals[S] - (a1- 255);
}else if(b1 < 0 ){
S1 = KV.vals[S] + (KV.henka1 - KV.vals[S]);
}else{
S1 = KV.vals[S];
}
// part1
RGB.toRGB(KV.vals[H],KV.vals[L],S1);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(290,130,40,40);
if(r3 >= 24){
r3 = r3 - 24;
}
RGB.toRGB(KV.vh[r3],KV.vals[L],S1+KV.henka1);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(290+40,130,40,40);
if(r4 >= 24){
r4 = r4 - 24;
}
RGB.toRGB(KV.vh[r4],KV.vals[L],S1-KV.henka1);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(290-40,130,40,40);
// part2
RGB.toRGB(KV.vals[H],KV.vals[L],S1);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(290,175,40,40);
if(r3 >= 24){
r3 = r3 - 24;
}
RGB.toRGB(KV.vh[r3],KV.vals[L],S1-KV.henka1);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(290+40,175,40,40);
if(r4 >= 24){
r4 = r4 - 24;
}
RGB.toRGB(KV.vh[r4],KV.vals[L],S1+KV.henka1);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(290-40,175,40,40);
// Result2-3(lightness : similar)
a1 = KV.vals[L] + KV.henka1;
b1 = KV.vals[L] - KV.henka1;
if(a1 >= 256){
L1 = KV.vals[L] - (a1- 255);
}else if(b1 < 0 ){
L1 = KV.vals[L] + (KV.henka1 - KV.vals[L]);
}else{
L1 = KV.vals[L];
}
// part1
RGB.toRGB(KV.vals[H],L1,KV.vals[S]);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(290,330,40,40);
if(r3 >= 24){
r3 = r3 - 24;
}
RGB.toRGB(KV.vh[r3],L1+KV.henka1,KV.vals[S]);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(290+40,330,40,40);
if(r4 >= 24){
r4 = r4 - 24;
}
RGB.toRGB(KV.vh[r4],L1-KV.henka1,KV.vals[S]);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(290-40,330,40,40);
// part2
RGB.toRGB(KV.vals[H],L1,KV.vals[S]);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(290,375,40,40);
if(r3 >= 24){
r3 = r3 - 24;
}
RGB.toRGB(KV.vh[r3],L1-KV.henka1,KV.vals[S]);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(290+40,375,40,40);
if(r4 >= 24){
r4 = r4 - 24;
}
RGB.toRGB(KV.vh[r4],L1+KV.henka1,KV.vals[S]);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(290-40,375,40,40);
// Result2-4(saturation ; contrast)
a1 = KV.vals[S] + KV.henka2;
b1 = KV.vals[S] - KV.henka2;
if(a1 >= 256){
S1 = KV.vals[S] - (a1- 255);
}else if(b1 < 0 ){
S1 = KV.vals[S] + (KV.henka2 - KV. vals[S]);
}else{
S1 = KV.vals[S];
}
// part1
RGB.toRGB(KV.vals[H],KV.vals[L],S1);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(290,230,40,40);
if(r3 >= 24){
r3 = r3 - 24;
}
RGB.toRGB(KV.vh[r3],KV.vals[L],S1+KV.henka2);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(290+40,230,40,40);
if(r4 >= 24){
r4 = r4 - 24;
}
RGB.toRGB(KV.vh[r4],KV.vals[L],S1-KV.henka2);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(290-40,230,40,40);
// part2
RGB.toRGB(KV.vals[H],KV.vals[L],S1);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(290,275,40,40);
if(r3 >= 24){
r3 = r3 - 24;
}
RGB.toRGB(KV.vh[r3],KV.vals[L],S1-KV.henka2);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(290+40,275,40,40);
if(r4 >= 24){
r4 = r4 - 24;
}
RGB.toRGB(KV.vh[r4],KV.vals[L],S1+KV.henka2);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(290-40,275,40,40);
// Result2-4(lightness ; contrast)
a1 = KV.vals[L] + KV.henka2;
b1 = KV.vals[L] - KV.henka2;
if(a1 >= 256){
L1 = KV.vals[L] - (a1- 255);
}else if(b1 < 0 ){
L1 = KV.vals[L] + (KV.henka2 - KV.vals[L]);
}else{
L1 = KV.vals[L];
}
// part1
RGB.toRGB(KV.vals[H],L1,KV.vals[S]);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(290,430,40,40);
if(r3 >= 24){
r3 = r3 - 24;
}
RGB.toRGB(KV.vh[r3],L1+KV.henka2,KV.vals[S]);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(290+40,430,40,40);
if(r4 >= 24){
r4 = r4 - 24;
}
RGB.toRGB(KV.vh[r4],L1-KV.henka2,KV.vals[S]);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(290-40,430,40,40);
// part2
RGB.toRGB(KV.vals[H],L1,KV.vals[S]);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(290,475,40,40);
if(r3 >= 24){
r3 = r3 - 24;
}
RGB.toRGB(KV.vh[r3],L1-KV.henka2,KV.vals[S]);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(290+40,475,40,40);
if(r4 >= 24){
r4 = r4 - 24;
}
RGB.toRGB(KV.vh[r4],L1+KV.henka2,KV.vals[S]);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(290-40,475,40,40);
/***** 類似&対照を考慮 *****/
if(meido.l_d > KV.meido_d){
hhL = KV.henka2;hhS = KV.henka1;
}
else{
hhL = KV.henka1;hhS = KV.henka1;
}
aL = KV.vals[L] + hhL;
bL = KV.vals[L] - hhL;
aS = KV.vals[S] + hhS;
bS = KV.vals[S] - hhS;
if(aL >= 256){
L1 = KV.vals[L] - (aL - 255);
}else if(bL < 0 ){
L1 = KV.vals[L] + (hhL - KV.vals[L]);
}else{
L1 = KV.vals[L];
}
if(aS >= 256){
S1 = KV.vals[S] - (aS - 255);
}else if(bS < 0 ){
S1 = KV.vals[S] + (hhS - KV.vals[S]);
}else{
S1 = KV.vals[S];
}
// part1
RGB.toRGB(KV.vals[H],L1,S1);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(290,530,40,40);
if(r3 >= 24){
r3 = r3 - 24;
}
RGB.toRGB(KV.vh[r3],L1+hhL,S1+hhS);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(290+40,530,40,40);
if(r4 >= 24){
r4 = r4 - 24;
}
RGB.toRGB(KV.vh[r4],L1-hhL,S1-hhS);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(290-40,530,40,40);
// part2
RGB.toRGB(KV.vals[H],L1,S1);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(290,575,40,40);
if(r3 >= 24){
r3 = r3 - 24;
}
RGB.toRGB(KV.vh[r3],L1-hhL,S1-hhS);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(290+40,575,40,40);
if(r4 >= 24){
r4 = r4 - 24;
}
RGB.toRGB(KV.vh[r4],L1+hhL,S1+hhS);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(290-40,575,40,40);
/***************************************/
}
}
public void update(Graphics g){
paint(g);
}
}
class Four extends Panel{
int r,a1,b1,S1,L1;
int l[] = new int[6];
final int RED = 0;
final int GRN = 1;
final int BLU = 2;
final int H = 3;
final int L = 4;
final int S = 5;
int kakudo1,kakudo2,kakudo3;
int X1 = 110; int X2 = 370;
int Ang1,Ang2,Ang3,Ang4,Ang5,Ang6;
public void init(){
reshape(220,0,450,700);
}
public void paint(Graphics g){
int S1 = KV.vals[S]; int L1 = KV.vals[L];
if(KV.choice == 6){
Ang1 = 2; Ang2 = 4; Ang3 = 22;
Ang4 = 2; Ang5 = 20; Ang6 = 22;
kakudo1 = 30;kakudo2 = 30;kakudo3 = 60;
}
else if(KV.choice == 7){
Ang1 = 4; Ang2 = 8; Ang3 = 20;
Ang4 = 2; Ang5 = 16; Ang6 = 20;
kakudo1 = 60;kakudo2 = 60;kakudo3 = 120;
}
else if(KV.choice == 8){
Ang1 = 6; Ang2 = 12; Ang3 = 18;
Ang4 = 6; Ang5 = 12; Ang6 = 18;
kakudo1 = 90;kakudo2 = 90;kakudo3 = 180;
}
else if(KV.choice == 9){
Ang1 = 8; Ang2 = 12; Ang3 = 20;
Ang4 = 4; Ang5 = 12; Ang6 = 16;
kakudo1 = 60;kakudo2 = 120;kakudo3 = 180;
}
else if(KV.choice == 10){
Ang1 = 10; Ang2 = 12; Ang3 = 22;
Ang4 = 2; Ang5 = 12; Ang6 = 14;
kakudo1 = 30;kakudo2 = 150;kakudo3 = 180;
}
else if(KV.choice == 11){
Ang1 = 2; Ang2 = 12; Ang3 = 22;
Ang4 = 2; Ang5 = 12; Ang6 = 22;
kakudo1 = 30;kakudo2 = 30;kakudo3 = 180;
}
else if(KV.choice == 12){
Ang1 = 4; Ang2 = 12; Ang3 = 20;
Ang4 = 4; Ang5 = 12; Ang6 = 20;
kakudo1 = 60;kakudo2 = 60;kakudo3 = 180;
}
// Result1(vivid)
setBackground(new Color(KV.bg_r,KV.bg_g,KV.bg_b));
g.setColor(Color.black);
g.drawString("色相",X1 - 110,20);
g.drawString("base",X1+5,15);
String angle1 = Integer.toString(kakudo1);
g.drawString(angle1,X1-35,15);
String angle2 = Integer.toString(kakudo2);
g.drawString(angle2,X1+45,15);
String angle3 = Integer.toString(kakudo3);
g.drawString(angle3,X1+85,15);
RGB.toRGB(KV.vh[KV.base],KV.vl[KV.base],KV.vs[KV.base]);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(X1,20,40,40);
l[0] = KV.vl[KV.base];
r = KV.base + Ang1;
if(r >= 24){
r = r - 24;
}
RGB.toRGB(KV.vh[r],KV.vl[r],KV.vs[r]);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(X1+40,20,40,40);
l[1] = KV.vl[r];
r = KV.base + Ang2;
if(r >= 24){
r = r - 24;
}
RGB.toRGB(KV.vh[r],KV.vl[r],KV.vs[r]);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(X1+40*2,20,40,40);
l[2] = KV.vl[r];
r = KV.base + Ang3;
if(r >= 24){
r = r - 24;
}
RGB.toRGB(KV.vh[r],KV.vl[r],KV.vs[r]);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(X1-40,20,40,40);
l[3] = KV.vl[r];
meido.meido_4(l[0],l[1],l[2],l[3]);
// Result2(saturation & lightness : identical)
g.setColor(Color.black);
g.drawString("彩度 & 明度",X1 - 110,80);
g.drawString(": 同一",X1 - 110,95);
RGB.toRGB(KV.vals[H],KV.vals[L],KV.vals[S]);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(X1,75,40,40);
r = KV.base + Ang1;
if(r >= 24){
r = r - 24;
}
RGB.toRGB(KV.vh[r],KV.vals[L],KV.vals[S]);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(X1+40,75,40,40);
r = KV.base + Ang2;
if(r >= 24){
r = r - 24;
}
RGB.toRGB(KV.vh[r],KV.vals[L],KV.vals[S]);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(X1+40*2,75,40,40);
r = KV.base + Ang3;
if(r >= 24){
r = r - 24;
}
RGB.toRGB(KV.vh[r],KV.vals[L],KV.vals[S]);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(X1-40,75,40,40);
// Result3(saturation : similar)
g.setColor(Color.black);
g.drawString("彩度 : 類似",X1-110,135);
a1 = KV.vals[S] + KV.henka1;
b1 = KV.vals[S] - KV.henka1;
if(a1 >= 256){
S1 = KV.vals[S] - (a1- 255);
}
if(b1 < 0 ){
S1 = KV.vals[S] + (KV.henka1 - KV.vals[S]);
}
// part1
RGB.toRGB(KV.vals[H],KV.vals[L],S1);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(X1,130,40,40);
r = KV.base + Ang1;
if(r >= 24){
r = r - 24;
}
RGB.toRGB(KV.vh[r],KV.vals[L],S1+KV.henka1/2);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(X1+40,130,40,40);
r = KV.base + Ang2;
if(r >= 24){
r = r - 24;
}
RGB.toRGB(KV.vh[r],KV.vals[L],S1+KV.henka1);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(X1+40*2,130,40,40);
r = KV.base + Ang3;
if(r >= 24){
r = r - 24;
}
RGB.toRGB(KV.vh[r],KV.vals[L],S1-KV.henka1/2);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(X1-40,130,40,40);
// part2
RGB.toRGB(KV.vals[H],KV.vals[L],S1);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(X1,175,40,40);
r = KV.base + Ang1;
if(r >= 24){
r = r - 24;
}
RGB.toRGB(KV.vh[r],KV.vals[L],S1-KV.henka1/2);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(X1+40,175,40,40);
r = KV.base + Ang2;
if(r >= 24){
r = r - 24;
}
RGB.toRGB(KV.vh[r],KV.vals[L],S1-KV.henka1);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(X1+40*2,175,40,40);
r = KV.base + Ang3;
if(r >= 24){
r = r - 24;
}
RGB.toRGB(KV.vh[r],KV.vals[L],S1+KV.henka1/2);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(X1-40,175,40,40);
// Result3(lightness : similar)
g.setColor(Color.black);
g.drawString("明度 : 類似",X1-110,335);
a1 = KV.vals[L] + KV.henka1;
b1 = KV.vals[L] - KV.henka1;
if(a1 >= 256){
L1 = KV.vals[L] - (a1- 255);
}
if(b1 < 0 ){
L1 = KV.vals[L] + (KV.henka1 - KV.vals[L]);
}
// part1
RGB.toRGB(KV.vals[H],L1,KV.vals[S]);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(X1,330,40,40);
r = KV.base + Ang1;
if(r >= 24){
r = r - 24;
}
RGB.toRGB(KV.vh[r],L1+KV.henka1/2,KV.vals[S]);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(X1+40,330,40,40);
r = KV.base + Ang2;
if(r >= 24){
r = r - 24;
}
RGB.toRGB(KV.vh[r],L1+KV.henka1,KV.vals[S]);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(X1+40*2,330,40,40);
r = KV.base + Ang3;
if(r >= 24){
r = r - 24;
}
RGB.toRGB(KV.vh[r],L1-KV.henka1/2,KV.vals[S]);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(X1-40,330,40,40);
// part2
RGB.toRGB(KV.vals[H],L1,KV.vals[S]);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(X1,375,40,40);
r = KV.base + Ang1;
if(r >= 24){
r = r - 24;
}
RGB.toRGB(KV.vh[r],L1-KV.henka1/2,KV.vals[S]);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(X1+40,375,40,40);
r = KV.base + Ang2;
if(r >= 24){
r = r - 24;
}
RGB.toRGB(KV.vh[r],L1-KV.henka1,KV.vals[S]);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(X1+40*2,375,40,40);
r = KV.base + Ang3;
if(r >= 24){
r = r - 24;
}
RGB.toRGB(KV.vh[r],L1+KV.henka1/2,KV.vals[S]);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(X1-40,375,40,40);
// Result4(saturation ; contrast)
g.setColor(Color.black);
g.drawString("彩度 : 対照",X1 - 110,235);
a1 = KV.vals[S] + KV.henka2;
b1 = KV.vals[S] - KV.henka2;
if(a1 >= 256){
S1 = KV.vals[S] - (a1- 255);
}
if(b1 < 0 ){
S1 = KV.vals[S] + (KV.henka2 - KV.vals[S]);
}
// part1
RGB.toRGB(KV.vals[H],KV.vals[L],S1);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(X1,230,40,40);
r = KV.base + Ang1;
if(r >= 24){
r = r - 24;
}
RGB.toRGB(KV.vh[r],KV.vals[L],S1+KV.henka2/2);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(X1+40,230,40,40);
r = KV.base + Ang2;
if(r >= 24){
r = r - 24;
}
RGB.toRGB(KV.vh[r],KV.vals[L],S1+KV.henka2);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(X1+40*2,230,40,40);
r = KV.base + Ang3;
if(r >= 24){
r = r - 24;
}
RGB.toRGB(KV.vh[r],KV.vals[L],S1-KV.henka2/2);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(X1-40,230,40,40);
// part2
RGB.toRGB(KV.vals[H],KV.vals[L],S1);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(X1,275,40,40);
r = KV.base + Ang1;
if(r >= 24){
r = r - 24;
}
RGB.toRGB(KV.vh[r],KV.vals[L],S1-KV.henka2/2);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(X1+40,275,40,40);
r = KV.base + Ang2;
if(r >= 24){
r = r - 24;
}
RGB.toRGB(KV.vh[r],KV.vals[L],S1-KV.henka2);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(X1+40*2,275,40,40);
r = KV.base + Ang3;
if(r >= 24){
r = r - 24;
}
RGB.toRGB(KV.vh[r],KV.vals[L],S1+KV.henka2/2);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(X1-40,275,40,40);
// Result4(lightness ; contrast)
g.setColor(Color.black);
g.drawString("明度 : 対照",X1-110,435);
a1 = KV.vals[L] + KV.henka2;
b1 = KV.vals[L] - KV.henka2;
if(a1 >= 256){
L1 = KV.vals[L] - (a1- 255);
}
if(b1 < 0 ){
L1 = KV.vals[L] + (KV.henka2 - KV.vals[L]);
}
// part1
RGB.toRGB(KV.vals[H],L1,KV.vals[S]);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(X1,430,40,40);
r = KV.base + Ang1;
if(r >= 24){
r = r - 24;
}
RGB.toRGB(KV.vh[r],L1+KV.henka2/2,KV.vals[S]);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(X1+40,430,40,40);
r = KV.base + Ang2;
if(r >= 24){
r = r - 24;
}
RGB.toRGB(KV.vh[r],L1+KV.henka2,KV.vals[S]);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(X1+40*2,430,40,40);
r = KV.base + Ang3;
if(r >= 24){
r = r - 24;
}
RGB.toRGB(KV.vh[r],L1-KV.henka2/2,KV.vals[S]);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(X1-40,430,40,40);
// part2
RGB.toRGB(KV.vals[H],L1,KV.vals[S]);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(X1,475,40,40);
r = KV.base + Ang1;
if(r >= 24){
r = r - 24;
}
RGB.toRGB(KV.vh[r],L1-KV.henka2/2,KV.vals[S]);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(X1+40,475,40,40);
r = KV.base + Ang2;
if(r >= 24){
r = r - 24;
}
RGB.toRGB(KV.vh[r],L1-KV.henka2,KV.vals[S]);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(X1+40*2,475,40,40);
r = KV.base + Ang3;
if(r >= 24){
r = r - 24;
}
RGB.toRGB(KV.vh[r],L1+KV.henka2/2,KV.vals[S]);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(X1-40,475,40,40);
/***** 類似&対照を考慮 *****/
int aL,bL,aS,bS,hhL=0,hhS=0;
if(KV.choice == 8||KV.choice == 9||KV.choice == 10||KV.choice == 11){
if(meido.l_d > KV.meido_d){
hhL = KV.henka2;hhS = KV.henka1;
}
else{
hhL = KV.henka1;hhS = KV.henka2;
}
}
if(KV.choice == 6||KV.choice == 7||KV.choice == 12){
if(meido.l_d > KV.meido_d){
hhL = KV.henka2;hhS = KV.henka1;
}
else{
hhL = KV.henka1;hhS = KV.henka1;
}
}
g.setColor(Color.black);
g.drawString("調和",X1-110,535);
aL = KV.vals[L] + hhL;
bL = KV.vals[L] - hhL;
aS = KV.vals[S] + hhS;
bS = KV.vals[S] - hhS;
if(aL >= 256){
L1 = KV.vals[L] - (aL - 255);
}else if(bL < 0 ){
L1 = KV.vals[L] + (hhL - KV.vals[L]);
}else{
L1 = KV.vals[L];
}
if(aS >= 256){
S1 = KV.vals[S] - (aS - 255);
}else if(bS < 0 ){
S1 = KV.vals[S] + (hhS - KV.vals[S]);
}else{
S1 = KV.vals[S];
}
// part1
RGB.toRGB(KV.vals[H],L1,S1);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(X1,530,40,40);
r = KV.base + Ang1;
if(r >= 24){
r = r - 24;
}
RGB.toRGB(KV.vh[r],L1+hhL/2,S1+hhS/2);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(X1+40,530,40,40);
r = KV.base + Ang2;
if(r >= 24){
r = r - 24;
}
RGB.toRGB(KV.vh[r],L1+hhL,S1+hhS);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(X1+40*2,530,40,40);
r = KV.base + Ang3;
if(r >= 24){
r = r - 24;
}
RGB.toRGB(KV.vh[r],L1-hhL/2,S1-hhS/2);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(X1-40,530,40,40);
// part2
RGB.toRGB(KV.vals[H],L1,S1);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(X1,575,40,40);
r = KV.base + Ang1;
if(r >= 24){
r = r - 24;
}
RGB.toRGB(KV.vh[r],L1-hhL/2,S1-hhS/2);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(X1+40,575,40,40);
r = KV.base + Ang2;
if(r >= 24){
r = r - 24;
}
RGB.toRGB(KV.vh[r],L1-hhL,S1-hhS);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(X1+40*2,575,40,40);
r = KV.base + Ang3;
if(r >= 24){
r = r - 24;
}
RGB.toRGB(KV.vh[r],L1+hhL/2,S1+hhS/2);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(X1-40,575,40,40);
/***************************************/
// Result2-1(vivid)
g.setColor(Color.black);
g.drawString("base",X2+5,15);
angle1 = Integer.toString(kakudo1);
g.drawString(angle1,X2+45,15);
angle2 = Integer.toString(kakudo2);
g.drawString(angle2,X2-35,15);
angle3 = Integer.toString(kakudo3);
g.drawString(angle3,X2-75,15);
RGB.toRGB(KV.vh[KV.base],KV.vl[KV.base],KV.vs[KV.base]);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(X2,20,40,40);
l[0] = KV.vl[KV.base];
r = KV.base + Ang4;
if(r >= 24){
r = r - 24;
}
RGB.toRGB(KV.vh[r],KV.vl[r],KV.vs[r]);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(X2+40,20,40,40);
l[1] = KV.vl[r];
r = KV.base + Ang6;
if(r >= 24){
r = r - 24;
}
RGB.toRGB(KV.vh[r],KV.vl[r],KV.vs[r]);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(X2-40,20,40,40);
l[2] = KV.vl[r];
r = KV.base + Ang5;
if(r >= 24){
r = r - 24;
}
RGB.toRGB(KV.vh[r],KV.vl[r],KV.vs[r]);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(X2-40*2,20,40,40);
l[3] = KV.vl[r];
meido.meido_4(l[0],l[1],l[2],l[3]);
// Result2-2(saturation & lightness : identical)
RGB.toRGB(KV.vals[H],KV.vals[L],KV.vals[S]);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(X2,75,40,40);
r = KV.base + Ang4;
if(r >= 24){
r = r - 24;
}
RGB.toRGB(KV.vh[r],KV.vals[L],KV.vals[S]);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(X2+40,75,40,40);
r = KV.base + Ang6;
if(r >= 24){
r = r - 24;
}
RGB.toRGB(KV.vh[r],KV.vals[L],KV.vals[S]);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(X2-40,75,40,40);
r = KV.base + Ang5;
if(r >= 24){
r = r - 24;
}
RGB.toRGB(KV.vh[r],KV.vals[L],KV.vals[S]);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(X2-40*2,75,40,40);
// Result3(saturation : similar)
a1 = KV.vals[S] + KV.henka1;
b1 = KV.vals[S] - KV.henka1;
if(a1 >= 256){
S1 = KV.vals[S] - (a1- 255);
}
if(b1 < 0 ){
S1 = KV.vals[S] + (KV.henka1 - KV.vals[S]);
}
// part1
RGB.toRGB(KV.vals[H],KV.vals[L],S1);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(X2,130,40,40);
r = KV.base + Ang4;
if(r >= 24){
r = r - 24;
}
RGB.toRGB(KV.vh[r],KV.vals[L],S1+KV.henka1/2);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(X2+40,130,40,40);
r = KV.base + Ang6;
if(r >= 24){
r = r - 24;
}
RGB.toRGB(KV.vh[r],KV.vals[L],S1-KV.henka1/2);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(X2-40,130,40,40);
r = KV.base + Ang5;
if(r >= 24){
r = r - 24;
}
RGB.toRGB(KV.vh[r],KV.vals[L],S1-KV.henka1);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(X2-40*2,130,40,40);
// part2
RGB.toRGB(KV.vals[H],KV.vals[L],S1);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(X2,175,40,40);
r = KV.base + Ang4;
if(r >= 24){
r = r - 24;
}
RGB.toRGB(KV.vh[r],KV.vals[L],S1-KV.henka1/2);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(X2+40,175,40,40);
r = KV.base + Ang6;
if(r >= 24){
r = r - 24;
}
RGB.toRGB(KV.vh[r],KV.vals[L],S1+KV.henka1/2);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(X2-40,175,40,40);
r = KV.base + Ang5;
if(r >= 24){
r = r - 24;
}
RGB.toRGB(KV.vh[r],KV.vals[L],S1+KV.henka1);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(X2-40*2,175,40,40);
// Result3(lightness : similar)
a1 = KV.vals[L] + KV.henka1;
b1 = KV.vals[L] - KV.henka1;
if(a1 >= 256){
L1 = KV.vals[L] - (a1- 255);
}
if(b1 < 0 ){
L1 = KV.vals[L] + (KV.henka1 - KV.vals[L]);
}
// part1
RGB.toRGB(KV.vals[H],L1,KV.vals[S]);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(X2,330,40,40);
r = KV.base + Ang4;
if(r >= 24){
r = r - 24;
}
RGB.toRGB(KV.vh[r],L1+KV.henka1/2,KV.vals[S]);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(X2+40,330,40,40);
r =KV. base + Ang6;
if(r >= 24){
r = r - 24;
}
RGB.toRGB(KV.vh[r],L1-KV.henka1/2,KV.vals[S]);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(X2-40,330,40,40);
r = KV.base + Ang5;
if(r >= 24){
r = r - 24;
}
RGB.toRGB(KV.vh[r],L1-KV.henka1,KV.vals[S]);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(X2-40*2,330,40,40);
// part2
RGB.toRGB(KV.vals[H],L1,KV.vals[S]);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(X2,375,40,40);
r = KV.base + Ang4;
if(r >= 24){
r = r - 24;
}
RGB.toRGB(KV.vh[r],L1-KV.henka1/2,KV.vals[S]);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(X2+40,375,40,40);
r = KV.base + Ang6;
if(r >= 24){
r = r - 24;
}
RGB.toRGB(KV.vh[r],L1+KV.henka1/2,KV.vals[S]);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(X2-40,375,40,40);
r = KV.base + Ang5;
if(r >= 24){
r = r - 24;
}
RGB.toRGB(KV.vh[r],L1+KV.henka1,KV.vals[S]);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(X2-40*2,375,40,40);
// Result4(saturation ; contrast)
a1 = KV.vals[S] + KV.henka2;
b1 = KV.vals[S] - KV.henka2;
if(a1 >= 256){
S1 = KV.vals[S] - (a1- 255);
}
if(b1 < 0 ){
S1 = KV.vals[S] + (KV.henka2 - KV.vals[S]);
}
// part1
RGB.toRGB(KV.vals[H],KV.vals[L],S1);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(X2,230,40,40);
r = KV.base + Ang4;
if(r >= 24){
r = r - 24;
}
RGB.toRGB(KV.vh[r],KV.vals[L],S1+KV.henka2/2);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(X2+40,230,40,40);
r = KV.base + Ang6;
if(r >= 24){
r = r - 24;
}
RGB.toRGB(KV.vh[r],KV.vals[L],S1-KV.henka2/2);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(X2-40,230,40,40);
r = KV.base + Ang5;
if(r >= 24){
r = r - 24;
}
RGB.toRGB(KV.vh[r],KV.vals[L],S1-KV.henka2);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(X2-40*2,230,40,40);
// part2
RGB.toRGB(KV.vals[H],KV.vals[L],S1);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(X2,275,40,40);
r = KV.base + Ang4;
if(r >= 24){
r = r - 24;
}
RGB.toRGB(KV.vh[r],KV.vals[L],S1-KV.henka2/2);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(X2+40,275,40,40);
r = KV.base + Ang6;
if(r >= 24){
r = r - 24;
}
RGB.toRGB(KV.vh[r],KV.vals[L],S1+KV.henka2/2);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(X2-40,275,40,40);
r = KV.base + Ang5;
if(r >= 24){
r = r - 24;
}
RGB.toRGB(KV.vh[r],KV.vals[L],S1+KV.henka2);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(X2-40*2,275,40,40);
// Result4(lightness ; contrast)
a1 = KV.vals[L] + KV.henka2;
b1 = KV.vals[L] - KV.henka2;
if(a1 >= 256){
L1 = KV.vals[L] - (a1- 255);
}
if(b1 < 0 ){
L1 = KV.vals[L] + (KV.henka2 - KV.vals[L]);
}
// part1
RGB.toRGB(KV.vals[H],L1,KV.vals[S]);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(X2,430,40,40);
r = KV.base + Ang4;
if(r >= 24){
r = r - 24;
}
RGB.toRGB(KV.vh[r],L1+KV.henka2/2,KV.vals[S]);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(X2+40,430,40,40);
r = KV.base + Ang6;
if(r >= 24){
r = r - 24;
}
RGB.toRGB(KV.vh[r],L1-KV.henka2/2,KV.vals[S]);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(X2-40,430,40,40);
r = KV.base + Ang5;
if(r >= 24){
r = r - 24;
}
RGB.toRGB(KV.vh[r],L1-KV.henka2,KV.vals[S]);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(X2-40*2,430,40,40);
// part2
RGB.toRGB(KV.vals[H],L1,KV.vals[S]);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(X2,475,40,40);
r = KV.base + Ang4;
if(r >= 24){
r = r - 24;
}
RGB.toRGB(KV.vh[r],L1-KV.henka2/2,KV.vals[S]);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(X2+40,475,40,40);
r = KV.base + Ang6;
if(r >= 24){
r = r - 24;
}
RGB.toRGB(KV.vh[r],L1+KV.henka2/2,KV.vals[S]);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(X2-40,475,40,40);
r = KV.base + Ang5;
if(r >= 24){
r = r - 24;
}
RGB.toRGB(KV.vh[r],L1+KV.henka2,KV.vals[S]);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(X2-40*2,475,40,40);
/***** 類似&対照を考慮 *****/
if(KV.choice == 8||KV.choice == 9||KV.choice == 10||KV.choice == 11){
if(meido.l_d > KV.meido_d){
hhL = KV.henka2;hhS = KV.henka1;
}
else{
hhL = KV.henka1;hhS = KV.henka2;
}
}
if(KV.choice == 6||KV.choice == 7||KV.choice == 12){
if(meido.l_d > KV.meido_d){
hhL = KV.henka2;hhS = KV.henka1;
}
else{
hhL = KV.henka1;hhS = KV.henka1;
}
}
aL = KV.vals[L] + hhL;
bL = KV.vals[L] - hhL;
aS = KV.vals[S] + hhS;
bS = KV.vals[S] - hhS;
if(aL >= 256){
L1 = KV.vals[L] - (aL - 255);
}else if(bL < 0 ){
L1 = KV.vals[L] + (hhL - KV.vals[L]);
}else{
L1 = KV.vals[L];
}
if(aS >= 256){
S1 = KV.vals[S] - (aS - 255);
}else if(bS < 0 ){
S1 = KV.vals[S] + (hhS - KV.vals[S]);
}else{
S1 = KV.vals[S];
}
// part1
RGB.toRGB(KV.vals[H],L1,S1);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(X2,530,40,40);
r = KV.base + Ang4;
if(r >= 24){
r = r - 24;
}
RGB.toRGB(KV.vh[r],L1+hhL/2,S1+hhS/2);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(X2+40,530,40,40);
r = KV.base + Ang6;
if(r >= 24){
r = r - 24;
}
RGB.toRGB(KV.vh[r],L1-hhL/2,S1-hhS/2);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(X2-40,530,40,40);
r = KV.base + Ang5;
if(r >= 24){
r = r - 24;
}
RGB.toRGB(KV.vh[r],L1-hhL,S1-hhS);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(X2-40*2,530,40,40);
// part2
RGB.toRGB(KV.vals[H],L1,S1);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(X2,575,40,40);
r = KV.base + Ang4;
if(r >= 24){
r = r - 24;
}
RGB.toRGB(KV.vh[r],L1-hhL/2,S1-hhS/2);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(X2+40,575,40,40);
r = KV.base + Ang6;
if(r >= 24){
r = r - 24;
}
RGB.toRGB(KV.vh[r],L1+hhL/2,S1+hhS/2);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(X2-40,575,40,40);
r = KV.base + Ang5;
if(r >= 24){
r = r - 24;
}
RGB.toRGB(KV.vh[r],L1+hhL,S1+hhS);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(X2-40*2,575,40,40);
/***************************************/
}
public void update(Graphics g){
paint(g);
}
}
class Five extends Panel{
int r,a1,a2,b1,b2,S1,S2,L1,L2;
int l[] = new int[6];
final int RED = 0;
final int GRN = 1;
final int BLU = 2;
final int H = 3;
final int L = 4;
final int S = 5;
int kakudo1,kakudo2,kakudo3,kakudo4;
public void init(){
reshape(220,0,450,700);
}
public void paint(Graphics g){
if(KV.choice == 13){
kakudo1 = 60;kakudo2 = 30;kakudo3 = 30;kakudo4 = 60;
}
else if(KV.choice == 14){
kakudo1 = 120;kakudo2 = 60;kakudo3 = 60;kakudo4 = 120;
}
// Result1(vivid)
setBackground(new Color(KV.bg_r,KV.bg_g,KV.bg_b));
g.setColor(Color.black);
g.drawString("色相",0,20);
g.drawString("base",155,15);
String angle2 = Integer.toString(kakudo1);
g.drawString(angle2,80,15);
String angle3 = Integer.toString(kakudo2);
g.drawString(angle3,120,15);
String angle4 = Integer.toString(kakudo3);
g.drawString(angle4,200,15);
String angle5 = Integer.toString(kakudo4);
g.drawString(angle5,240,15);
RGB.toRGB(KV.vh[KV.base],KV.vl[KV.base],KV.vs[KV.base]);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(150,20,40,40);
l[0] = KV.vl[KV.base];
for(int i = 0; i < 2; i=i+1){
if(KV.choice == 13)
{r = KV.base + 2*(i+1);}
else if(KV.choice == 14)
{r = KV.base + 4*(i+1);}
if(r >= 24){
r = r - 24;
}
RGB.toRGB(KV.vh[r],KV.vl[r],KV.vs[r]);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(150+40*(i+1),20,40,40);
l[i+1] = KV.vl[r];
}
for(int i = 0; i < 2; i=i+1){
if(KV.choice == 13)
{r = KV.base + 2*i + 20;}
else if(KV.choice == 14)
{r = KV.base + 4*i + 16;}
if(r >= 24){
r = r - 24;
}
RGB.toRGB(KV.vh[r],KV.vl[r],KV.vs[r]);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(70+40*i,20,40,40);
l[i+3] = KV.vl[r];
}
meido.meido_5(l[0],l[1],l[2],l[3],l[4]);
// Result2(saturation & lightness : identical)
g.setColor(Color.black);
g.drawString("彩度 & 明度",0,80);
g.drawString(": 同一",0,95);
RGB.toRGB(KV.vals[H],KV.vals[L],KV.vals[S]);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(150,75,40,40);
for(int i = 0; i < 2; i=i+1){
if(KV.choice == 13)
{r = KV.base + 2*(i+1);}
else if(KV.choice == 14)
{r = KV.base + 4*(i+1);}
if(r >= 24){
r = r - 24;
}
RGB.toRGB(KV.vh[r],KV.vals[L],KV.vals[S]);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(150+40*(i+1),75,40,40); }
for(int i = 0; i < 2; i=i+1){
if(KV.choice == 13)
{r = KV.base + 2*i + 20;}
else if(KV.choice == 14)
{r = KV.base + 4*i + 16;}
if(r >= 24){
r = r - 24;
}
RGB.toRGB(KV.vh[r],KV.vals[L],KV.vals[S]);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(70+40*i,75,40,40);
}
// Result1(ruiji)
// saturation : ruiji
g.setColor(Color.black);
g.drawString("彩度 : 類似",0,135);
a1 = KV.vals[S] + KV.henka1;
b1 = KV.vals[S] - KV.henka1;
if(a1 >= 256){
S1 = KV.vals[S] - (a1- 255);
}
if(b1 < 0 ){
S1 = KV.vals[S] + (KV.henka1 - KV.vals[S]);
}
if(a1 <= 255 && b1 >= 0){
S1 = KV.vals[S];
}
// part1
RGB.toRGB(KV.vals[H],KV.vals[L],S1);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(150,130,40,40);
for(int i = 0; i < 2; i=i+1){
if(KV.choice == 13)
{r = KV.base + 2*(i+1);}
else if(KV.choice == 14)
{r = KV.base + 4*(i+1);}
if(r >= 24){
r = r - 24;
}
RGB.toRGB(KV.vh[r],KV.vals[L],S1+(KV.henka1/2)*(i+1));
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(150+40*(i+1),130,40,40); }
for(int i = 0; i < 2; i=i+1){
if(KV.choice == 13)
{r = KV.base + 2*i + 20;}
else if(KV.choice == 14)
{r = KV.base + 4*i + 16;}
if(r >= 24){
r = r - 24;
}
RGB.toRGB(KV.vh[r],KV.vals[L],S1-(KV.henka1/2)*(2-i));
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(70+40*i,130,40,40);
}
// part2
RGB.toRGB(KV.vals[H],KV.vals[L],S1);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(150,175,40,40);
for(int i = 0; i < 2; i=i+1){
if(KV.choice == 13)
{r = KV.base + 2*(i+1);}
else if(KV.choice == 14)
{r = KV.base + 4*(i+1);}
if(r >= 24){
r = r - 24;
}
RGB.toRGB(KV.vh[r],KV.vals[L],S1-(KV.henka1/2)*(i+1));
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(150+40*(i+1),175,40,40); }
for(int i = 0; i < 2; i=i+1){
if(KV.choice == 13)
{r = KV.base + 2*i + 20;}
else if(KV.choice == 14)
{r = KV.base + 4*i + 16;}
if(r >= 24){
r = r - 24;
}
RGB.toRGB(KV.vh[r],KV.vals[L],S1+(KV.henka1/2)*(2-i));
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(70+40*i,175,40,40);
}
// lightness : ruiji
g.setColor(Color.black);
g.drawString("明度 : 類似",0,335);
a1 = KV.vals[L] + KV.henka1;
b1 = KV.vals[L] - KV.henka1;
if(a1 >= 256){
L1 = KV.vals[L] - (a1- 255);
}
if(b1 < 0 ){
L1 = KV.vals[L] + (KV.henka1 - KV.vals[L]);
}
if(a1 <= 255 && b1 >= 0){
L1 = KV.vals[L];
}
// part1
RGB.toRGB(KV.vals[H],L1,KV.vals[S]);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(150,330,40,40);
for(int i = 0; i < 2; i=i+1){
if(KV.choice == 13)
{r = KV.base + 2*(i+1);}
else if(KV.choice == 14)
{r = KV.base + 4*(i+1);}
if(r >= 24){
r = r - 24;
}
RGB.toRGB(KV.vh[r],L1+(KV.henka1/2)*(i+1),KV.vals[S]);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(150+40*(i+1),330,40,40); }
for(int i = 0; i < 2; i=i+1){
if(KV.choice == 13)
{r = KV.base + 2*i + 20;}
else if(KV.choice == 14)
{r = KV.base + 4*i + 16;}
if(r >= 24){
r = r - 24;
}
RGB.toRGB(KV.vh[r],L1-(KV.henka1/2)*(2-i),KV.vals[S]);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(70+40*i,330,40,40);
}
// part2
RGB.toRGB(KV.vals[H],L1,KV.vals[S]);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(150,375,40,40);
for(int i = 0; i < 2; i=i+1){
if(KV.choice == 13)
{r = KV.base + 2*(i+1);}
else if(KV.choice == 14)
{r = KV.base + 4*(i+1);}
if(r >= 24){
r = r - 24;
}
RGB.toRGB(KV.vh[r],L1-(KV.henka1/2)*(i+1),KV.vals[S]);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(150+40*(i+1),375,40,40); }
for(int i = 0; i < 2; i=i+1){
if(KV.choice == 13)
{r = KV.base + 2*i + 20;}
else if(KV.choice == 14)
{r = KV.base + 4*i + 16;}
if(r >= 24){
r = r - 24;
}
RGB.toRGB(KV.vh[r],L1+(KV.henka1/2)*(2-i),KV.vals[S]);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(70+40*i,375,40,40);
}
// saturation : taishou
g.setColor(Color.black);
g.drawString("彩度 : 対照",0,235);
a2 = KV.vals[S] + KV.henka2;
b2 = KV.vals[S] - KV.henka2;
if(a2 >= 256){
S2 = KV.vals[S] - (a2- 255);
}
if(b2 < 0 ){
S2 = KV.vals[S] + (KV.henka2 - KV.vals[S]);
}
if(a2 <= 255 && b2 >= 0){
S2 = KV.vals[S];
}
// part1
RGB.toRGB(KV.vals[H],KV.vals[L],S2);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(150,230,40,40);
for(int i = 0; i < 2; i=i+1){
if(KV.choice == 13)
{r = KV.base + 2*(i+1);}
else if(KV.choice == 14)
{r = KV.base + 4*(i+1);}
if(r >= 24){
r = r - 24;
}
RGB.toRGB(KV.vh[r],KV.vals[L],S2+(KV.henka2/2)*(i+1));
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(150+40*(i+1),230,40,40); }
for(int i = 0; i < 2; i=i+1){
if(KV.choice == 13)
{r = KV.base + 2*i + 20;}
else if(KV.choice == 14)
{r = KV.base + 4*i + 16;}
if(r >= 24){
r = r - 24;
}
RGB.toRGB(KV.vh[r],KV.vals[L],S2-(KV.henka2/2)*(2-i));
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(70+40*i,230,40,40);
}
// part2
RGB.toRGB(KV.vals[H],KV.vals[L],S2);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(150,275,40,40);
for(int i = 0; i < 2; i=i+1){
if(KV.choice == 13)
{r = KV.base + 2*(i+1);}
else if(KV.choice == 14)
{r = KV.base + 4*(i+1);}
if(r >= 24){
r = r - 24;
}
RGB.toRGB(KV.vh[r],KV.vals[L],S2-(KV.henka2/2)*(i+1));
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(150+40*(i+1),275,40,40); }
for(int i = 0; i < 2; i=i+1){
if(KV.choice == 13)
{r = KV.base + 2*i + 20;}
else if(KV.choice == 14)
{r = KV.base + 4*i + 16;}
if(r >= 24){
r = r - 24;
}
RGB.toRGB(KV.vh[r],KV.vals[L],S2+(KV.henka2/2)*(2-i));
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(70+40*i,275,40,40);
}
// lightness : taishou
g.setColor(Color.black);
g.drawString("明度 : 対照",0,435);
a2 = KV.vals[L] + KV.henka2;
b2 = KV.vals[L] - KV.henka2;
if(a2 >= 256){
L2 = KV.vals[L] - (a2- 255);
}
if(b2 < 0 ){
L2 = KV.vals[L] + (KV.henka2 - KV.vals[L]);
}
if(a2 <= 255 && b2 >= 0){
L2 = KV.vals[L];
}
// part1
RGB.toRGB(KV.vals[H],L2,KV.vals[L]);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(150,430,40,40);
for(int i = 0; i < 2; i=i+1){
if(KV.choice == 13)
{r = KV.base + 2*(i+1);}
else if(KV.choice == 14)
{r = KV.base + 4*(i+1);}
if(r >= 24){
r = r - 24;
}
RGB.toRGB(KV.vh[r],L2+(KV.henka2/2)*(i+1),KV.vals[S]);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(150+40*(i+1),430,40,40); }
for(int i = 0; i < 2; i=i+1){
if(KV.choice == 13)
{r = KV.base + 2*i + 20;}
else if(KV.choice == 14)
{r = KV.base + 4*i + 16;}
if(r >= 24){
r = r - 24;
}
RGB.toRGB(KV.vh[r],L2-(KV.henka2/2)*(2-i),KV.vals[S]);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(70+40*i,430,40,40);
}
// part2
RGB.toRGB(KV.vals[H],L2,KV.vals[S]);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(150,475,40,40);
for(int i = 0; i < 2; i=i+1){
if(KV.choice == 13)
{r = KV.base + 2*(i+1);}
else if(KV.choice == 14)
{r = KV.base + 4*(i+1);}
if(r >= 24){
r = r - 24;
}
RGB.toRGB(KV.vh[r],L2-(KV.henka2/2)*(i+1),KV.vals[S]);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(150+40*(i+1),475,40,40); }
for(int i = 0; i < 2; i=i+1){
if(KV.choice == 13)
{r = KV.base + 2*i + 20;}
else if(KV.choice == 14)
{r = KV.base + 4*i + 16;}
if(r >= 24){
r = r - 24;
}
RGB.toRGB(KV.vh[r],L2+(KV.henka2/2)*(2-i),KV.vals[S]);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(70+40*i,475,40,40);
}
/***** 類似&対照を考慮 *****/
int aL,bL,aS,bS,hhL=0,hhS=0;
if(KV.choice == 13||KV.choice == 14){
if(meido.l_d > KV.meido_d){
hhL = KV.henka2;hhS = KV.henka1;
}
else{
hhL = KV.henka1;hhS = KV.henka2;
}
}
g.setColor(Color.black);
g.drawString("調和",0,535);
aL = KV.vals[L] + hhL;
bL = KV.vals[L] - hhL;
aS = KV.vals[S] + hhS;
bS = KV.vals[S] - hhS;
if(aL >= 256){
L1 = KV.vals[L] - (aL - 255);
}else if(bL < 0 ){
L1 = KV.vals[L] + (hhL - KV.vals[L]);
}else{
L1 = KV.vals[L];
}
if(aS >= 256){
S1 = KV.vals[S] - (aS - 255);
}else if(bS < 0 ){
S1 = KV.vals[S] + (hhS - KV.vals[S]);
}else{
S1 = KV.vals[S];
}
// part1
RGB.toRGB(KV.vals[H],L1,S1);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(150,530,40,40);
for(int i = 0; i < 2; i=i+1){
if(KV.choice == 13)
{r = KV.base + 2*(i+1);}
else if(KV.choice == 14)
{r = KV.base + 4*(i+1);}
if(r >= 24){
r = r - 24;
}
RGB.toRGB(KV.vh[r],L1+(hhL/2)*(i+1),S1+(hhS/2)*(i+1));
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(150+40*(i+1),530,40,40); }
for(int i = 0; i < 2; i=i+1){
if(KV.choice == 13)
{r = KV.base + 2*i + 20;}
else if(KV.choice == 14)
{r = KV.base + 4*i + 16;}
if(r >= 24){
r = r - 24;
}
RGB.toRGB(KV.vh[r],L1-(hhL/2)*(2-i),S1-(hhS/2)*(2-i));
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(70+40*i,530,40,40);
}
// part2
RGB.toRGB(KV.vals[H],L1,S1);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(150,575,40,40);
for(int i = 0; i < 2; i=i+1){
if(KV.choice == 13)
{r = KV.base + 2*(i+1);}
else if(KV.choice == 14)
{r = KV.base + 4*(i+1);}
if(r >= 24){
r = r - 24;
}
RGB.toRGB(KV.vh[r],L1-(hhL/2)*(i+1),S1-(hhS/2)*(i+1));
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(150+40*(i+1),575,40,40); }
for(int i = 0; i < 2; i=i+1){
if(KV.choice == 13)
{r = KV.base + 2*i + 20;}
else if(KV.choice == 14)
{r = KV.base + 4*i + 16;}
if(r >= 24){
r = r - 24;
}
RGB.toRGB(KV.vh[r],L1+(hhL/2)*(2-i),S1+(hhS/2)*(2-i));
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(70+40*i,575,40,40);
}
/***************************************/
}
public void update(Graphics g){
paint(g);
}
}
class Six extends Panel{
int X1 = 150;
int r,a1,a2,b1,b2,S1,S2,L1,L2;
int l[] = new int[6];
final int RED = 0;
final int GRN = 1;
final int BLU = 2;
final int H = 3;
final int L = 4;
final int S = 5;
public void init(){
reshape(220,0,450,700);
}
public void paint(Graphics g){
S1 = KV.vals[S]; S2 = KV.vals[S]; L1 = KV.vals[L]; L2 = KV.vals[L];
// Result1(vivid)
setBackground(new Color(KV.bg_r,KV.bg_g,KV.bg_b));
g.setColor(Color.black);
g.drawString("色相",0,20);
g.drawString("base",X1+5,15);
String angle2 = Integer.toString(120);
g.drawString(angle2,X1-70,15);
String angle3 = Integer.toString(60);
g.drawString(angle3,X1-30,15);
String angle4 = Integer.toString(60);
g.drawString(angle4,X1+50,15);
String angle5 = Integer.toString(120);
g.drawString(angle5,X1+90,15);
String angle6 = Integer.toString(180);
g.drawString(angle6,X1+130,15);
RGB.toRGB(KV.vh[KV.base],KV.vl[KV.base],KV.vs[KV.base]);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(X1,20,40,40);
l[0] = KV.vl[KV.base];
for(int i = 0; i < 3; i=i+1){
r = KV.base + 4*(i+1);
if(r >= 24){
r = r - 24;
}
RGB.toRGB(KV.vh[r],KV.vl[r],KV.vs[r]);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(X1+40*(i+1),20,40,40);
l[i+1] = KV.vl[r];
}
for(int i = 0; i < 2; i=i+1){
r = KV.base + 4*i + 16;
if(r >= 24){
r = r - 24;
}
RGB.toRGB(KV.vh[r],KV.vl[r],KV.vs[r]);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(X1-80+40*i,20,40,40);
l[i+4] = KV.vl[r];
}
meido.meido_6(l[0],l[1],l[2],l[3],l[4],l[5]);
// Result2(saturation & lightness : identical)
g.setColor(Color.black);
g.drawString("彩度 & 明度",0,80);
g.drawString(": 同一",0,95);
RGB.toRGB(KV.vals[H],KV.vals[L],KV.vals[S]);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(X1,75,40,40);
for(int i = 0; i < 3; i=i+1){
r = KV.base + 4*(i+1);
if(r >= 24){
r = r - 24;
}
RGB.toRGB(KV.vh[r],KV.vals[L],KV.vals[S]);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(X1+40*(i+1),75,40,40); }
for(int i = 0; i < 2; i=i+1){
r = KV.base + 4*i + 16;
if(r >= 24){
r = r - 24;
}
RGB.toRGB(KV.vh[r],KV.vals[L],KV.vals[S]);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(X1-80+40*i,75,40,40); }
// Result1(ruiji)
// saturation : ruiji
g.setColor(Color.black);
g.drawString("彩度 : 類似",0,135);
a1 = KV.vals[S] + KV.henka1;
b1 = KV.vals[S] - KV.henka1;
if(a1 >= 256){
S1 = KV.vals[S] - (a1- 255);
}
if(b1 < 0 ){
S1 = KV.vals[S] + (KV.henka1 - KV.vals[S]);
}
if(a1 <= 255 && b1 >= 0){
S1 = KV.vals[S];
}
// part1
RGB.toRGB(KV.vals[H],KV.vals[L],S1);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(X1,130,40,40);
for(int i = 0; i < 3; i=i+1){
r = KV.base + 4*(i+1);
if(r >= 24){
r = r - 24;
}
RGB.toRGB(KV.vh[r],KV.vals[L],S1+(KV.henka1/3)*(i+1));
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(X1+40*(i+1),130,40,40); }
for(int i = 0; i < 2; i=i+1){
r = KV.base + 4*i + 16;
if(r >= 24){
r = r - 24;
}
RGB.toRGB(KV.vh[r],KV.vals[L],S1-(KV.henka1/2)*(2-i));
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(X1-80+40*i,130,40,40); }
// part2
RGB.toRGB(KV.vals[H],KV.vals[L],S1);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(X1,175,40,40);
for(int i = 0; i < 3; i=i+1){
r = KV.base + 4*(i+1);
if(r >= 24){
r = r - 24;
}
RGB.toRGB(KV.vh[r],KV.vals[L],S1-(KV.henka1/3)*(i+1));
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(X1+40*(i+1),175,40,40); }
for(int i = 0; i < 2; i=i+1){
r = KV.base + 4*i + 16;
if(r >= 24){
r = r - 24;
}
RGB.toRGB(KV.vh[r],KV.vals[L],S1+(KV.henka1/2)*(2-i));
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(X1-80+40*i,175,40,40); }
// lightness : ruiji
g.setColor(Color.black);
g.drawString("明度 : 類似",0,335);
a1 = KV.vals[L] + KV.henka1;
b1 = KV.vals[L] - KV.henka1;
if(a1 >= 256){
L1 = KV.vals[L] - (a1- 255);
}
if(b1 < 0 ){
L1 = KV.vals[L] + (KV.henka1 - KV.vals[L]);
}
if(a1 <= 255 && b1 >= 0){
L1 = KV.vals[L];
}
// part1
RGB.toRGB(KV.vals[H],L1,KV.vals[S]);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(X1,330,40,40);
for(int i = 0; i < 3; i=i+1){
r = KV.base + 4*(i+1);
if(r >= 24){
r = r - 24;
}
RGB.toRGB(KV.vh[r],L1+(KV.henka1/3)*(i+1),KV.vals[S]);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(X1+40*(i+1),330,40,40); }
for(int i = 0; i < 2; i=i+1){
r = KV.base + 4*i + 16;
if(r >= 24){
r = r - 24;
}
RGB.toRGB(KV.vh[r],L1-(KV.henka1/2)*(2-i),KV.vals[S]);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(X1-80+40*i,330,40,40); }
// part2
RGB.toRGB(KV.vals[H],L1,KV.vals[S]);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(X1,375,40,40);
for(int i = 0; i < 3; i=i+1){
r = KV.base + 4*(i+1);
if(r >= 24){
r = r - 24;
}
RGB.toRGB(KV.vh[r],L1-(KV.henka1/3)*(i+1),KV.vals[S]);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(X1+40*(i+1),375,40,40); }
for(int i = 0; i < 2; i=i+1){
r = KV.base + 4*i + 16;
if(r >= 24){
r = r - 24;
}
RGB.toRGB(KV.vh[r],L1+(KV.henka1/2)*(2-i),KV.vals[S]);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(X1-80+40*i,375,40,40); }
// saturation : contrast
g.setColor(Color.black);
g.drawString("彩度 : 対照",0,235);
a2 = KV.vals[S] + KV.henka2;
b2 = KV.vals[S] - KV.henka2;
if(a2 >= 256){
S2 = KV.vals[S] - (a2- 255);
}
if(b2 < 0 ){
S2 = KV.vals[S] + (KV.henka2 - KV.vals[S]);
}
if(a2 <= 255 && b2 >= 0){
S2 = KV.vals[S];
}
// part1
RGB.toRGB(KV.vals[H],KV.vals[L],S2);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(X1,230,40,40);
for(int i = 0; i < 3; i=i+1){
r = KV.base + 4*(i+1);
if(r >= 24){
r = r - 24;
}
RGB.toRGB(KV.vh[r],KV.vals[L],S2+(KV.henka2/3)*(i+1));
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(X1+40*(i+1),230,40,40); }
for(int i = 0; i < 2; i=i+1){
r = KV.base + 4*i + 16;
if(r >= 24){
r = r - 24;
}
RGB.toRGB(KV.vh[r],KV.vals[L],S2-(KV.henka2/2)*(2-i));
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(X1-80+40*i,230,40,40); }
// part2
RGB.toRGB(KV.vals[H],KV.vals[L],S2);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(X1,275,40,40);
for(int i = 0; i < 3; i=i+1){
r = KV.base + 4*(i+1);
if(r >= 24){
r = r - 24;
}
RGB.toRGB(KV.vh[r],KV.vals[L],S2-(KV.henka2/3)*(i+1));
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(X1+40*(i+1),275,40,40); }
for(int i = 0; i < 2; i=i+1){
r = KV.base + 4*i + 16;
if(r >= 24){
r = r - 24;
}
RGB.toRGB(KV.vh[r],KV.vals[L],S2+(KV.henka2/2)*(2-i));
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(X1-80+40*i,275,40,40); }
// lightness : contrast
g.setColor(Color.black);
g.drawString("明度 : 対照",0,435);
a2 = KV.vals[L] + KV.henka2;
b2 = KV.vals[L] - KV.henka2;
if(a2 >= 256){
L2 = KV.vals[L] - (a2- 255);
}
if(b2 < 0 ){
L2 = KV.vals[L] + (KV.henka2 - KV.vals[L]);
}
if(a2 <= 255 && b2 >= 0){
L2 = KV.vals[L];
}
// part1
RGB.toRGB(KV.vals[H],L2,KV.vals[S]);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(X1,430,40,40);
for(int i = 0; i < 3; i=i+1){
r = KV.base + 4*(i+1);
if(r >= 24){
r = r - 24;
}
RGB.toRGB(KV.vh[r],L2+(KV.henka2/3)*(i+1),KV.vals[S]);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(X1+40*(i+1),430,40,40); }
for(int i = 0; i < 2; i=i+1){
r = KV.base + 4*i + 16;
if(r >= 24){
r = r - 24;
}
RGB.toRGB(KV.vh[r],L2-(KV.henka2/2)*(2-i),KV.vals[S]);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(X1-80+40*i,430,40,40); }
// part2
RGB.toRGB(KV.vals[H],L2,KV.vals[S]);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(X1,475,40,40);
for(int i = 0; i < 3; i=i+1){
r = KV.base + 4*(i+1);
if(r >= 24){
r = r - 24;
}
RGB.toRGB(KV.vh[r],L2-(KV.henka2/3)*(i+1),KV.vals[S]);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(X1+40*(i+1),475,40,40); }
for(int i = 0; i < 2; i=i+1){
r = KV.base + 4*i + 16;
if(r >= 24){
r = r - 24;
}
RGB.toRGB(KV.vh[r],L2+(KV.henka2/2)*(2-i),KV.vals[S]);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(X1-80+40*i,475,40,40); }
/***** 類似&対照を考慮 *****/
int aL,bL,aS,bS,hhL=0,hhS=0;
if(KV.choice == 15){
if(meido.l_d > KV.meido_d){
hhL = KV.henka2;hhS = KV.henka1;
}
else{
hhL = KV.henka1;hhS = KV.henka2;
}
}
g.setColor(Color.black);
g.drawString("調和",0,535);
aL = KV.vals[L] + hhL;
bL = KV.vals[L] - hhL;
aS = KV.vals[S] + hhS;
bS = KV.vals[S] - hhS;
if(aL >= 256){
L1 = KV.vals[L] - (aL - 255);
}else if(bL < 0 ){
L1 = KV.vals[L] + (hhL - KV.vals[L]);
}else{
L1 = KV.vals[L];
}
if(aS >= 256){
S1 = KV.vals[S] - (aS - 255);
}else if(bS < 0 ){
S1 = KV.vals[S] + (hhS - KV.vals[S]);
}else{
S1 = KV.vals[S];
}
// part1
RGB.toRGB(KV.vals[H],L1,S1);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(X1,530,40,40);
for(int i = 0; i < 3; i=i+1){
r = KV.base + 4*(i+1);
if(r >= 24){
r = r - 24;
}
RGB.toRGB(KV.vh[r],L1+(hhL/3)*(i+1),S1+(hhS/3)*(i+1));
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(X1+40*(i+1),530,40,40); }
for(int i = 0; i < 2; i=i+1){
r = KV.base + 4*i + 16;
if(r >= 24){
r = r - 24;
}
RGB.toRGB(KV.vh[r],L1-(hhL/2)*(2-i),S1-(hhS/2)*(2-i));
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(X1-80+40*i,530,40,40); }
// part2
RGB.toRGB(KV.vals[H],L1,S1);
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(X1,575,40,40);
for(int i = 0; i < 3; i=i+1){
r = KV.base + 4*(i+1);
if(r >= 24){
r = r - 24;
}
RGB.toRGB(KV.vh[r],L1-(hhL/3)*(i+1),S1-(hhS/3)*(i+1));
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(X1+40*(i+1),575,40,40); }
for(int i = 0; i < 2; i=i+1){
r = KV.base + 4*i + 16;
if(r >= 24){
r = r - 24;
}
RGB.toRGB(KV.vh[r],L1+(hhL/2)*(2-i),S1+(hhS/2)*(2-i));
g.setColor(new Color(KV.vals[RED],KV.vals[GRN],KV.vals[BLU]));
g.fillRect(X1-80+40*i,575,40,40); }
/***************************************/
}
public void update(Graphics g){
paint(g);
}
}
matunaga@ke.ics.saitama-u.ac.jp