001/* 002 * Copyright (c) 2009 The openGion Project. 003 * 004 * Licensed under the Apache License, Version 2.0 (the "License"); 005 * you may not use this file except in compliance with the License. 006 * You may obtain a copy of the License at 007 * 008 * http://www.apache.org/licenses/LICENSE-2.0 009 * 010 * Unless required by applicable law or agreed to in writing, software 011 * distributed under the License is distributed on an "AS IS" BASIS, 012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, 013 * either express or implied. See the License for the specific language 014 * governing permissions and limitations under the License. 015 */ 016package org.opengion.fukurou.util; 017 018import java.awt.Color; 019// import java.util.LinkedHashMap; // 6.4.6.1 (2016/06/03) 020import java.util.Map; 021import java.util.HashMap; // 7.0.1.1 (2018/10/22) 022// import java.util.List; // 6.9.9.2 (2018/09/18) 023// import java.util.ArrayList; // 6.9.9.2 (2018/09/18) 024import java.util.Locale ; 025 026import org.opengion.fukurou.system.OgRuntimeException ; // 6.4.2.0 (2016/01/29) 027import static org.opengion.fukurou.system.HybsConst.CR; // 6.1.0.0 (2014/12/26) refactoring 028 029/** 030 * ColorMap.java は、共通的に使用される Color関連メソッドを集約した、クラスです。 031 * StringUtil から、Color関係の部分を独立させました。 032 * 033 * カラー文字列は、java.awt.Color static 定義色、CSS1 / HTML3–4 / VGA の色名称、 034 * X11の色名称 が指定できます。 035 * 036 * カラー番号は、ビビッドを、0~11 (V0~V11) , パステルを、12~23 (P0~P11) として登録します。 037 * 従来のカラー番号と異なりますので、ご注意ください。 038 * 039 * @og.group ユーティリティ 040 * @og.rev 6.0.2.1 (2014/09/26) 新規作成 041 * @og.rev 6.4.3.3 (2016/03/04) ViewForm_ImageTimeBar#FlgColorMap 内部クラスから機能移動 042 * @og.rev 7.0.1.1 (2018/10/22) 内部色コードを文字列として管理、配列は、パステルとビビッドから作成します。 043 * @og.rev 8.0.0.0 (2021/08/31) 内部カラーの優先順を、パステル、ビビッド に変更します。 044 * 045 * @version 6.0 046 * @author Kazuhiko Hasegawa 047 * @since JDK8.0, 048 */ 049public final class ColorMap { 050// // 6.9.9.2 (2018/09/18) Map から、CLR_ARY を作成します。 051// // 6.4.3.3 (2016/03/04) ViewForm_ImageTimeBar#FlgColorMap 内部クラスから移動 052// private static final Color[] CLR_ARY = new Color[] { 053// Color.BLUE ,Color.CYAN ,Color.GRAY ,Color.GREEN ,Color.LIGHT_GRAY ,Color.MAGENTA , 054// Color.DARK_GRAY ,Color.ORANGE ,Color.PINK ,Color.RED ,Color.YELLOW 055// }; 056 057 /** 色種別キーワード {@value} */ 058 public static final String PASTEL = "PASTEL" ; // 7.0.1.3 (2018/11/12) 059 /** 色種別キーワード {@value} */ 060 public static final String VIVID = "VIVID" ; // 7.0.1.3 (2018/11/12) 061 062 /** 6.9.9.2 (2018/09/18) パステルカラー の色コード配列追加 */ 063 // 8.5.4.2 (2024/01/12) PMD 7.0.0 UseShortArrayInitializer 064// private static final String[] PSTL_KEY = new String[] { 065 private static final String[] PSTL_KEY = { 066 "#7F7FFF" , "#7FFF7F" , "#FF7F7F" , // 5, 9, 1 067 "#7FFFFF" , "#FFFF7F" , "#FF7FFF" , // 7, 11, 3 068 "#7FFFBF" , "#FFBF7F" , "#BF7FFF" , // 8, 12, 4 069 "#7FBFFF" , "#BFFF7F" , "#FF7FBF" // 6, 10, 2 070 }; 071 072 /** 7.0.1.1 (2018/10/22) ビビッドカラー の色コード配列追加 */ 073 // 8.5.4.2 (2024/01/12) PMD 7.0.0 UseShortArrayInitializer 074// private static final String[] VIVID_KEY = new String[] { 075 private static final String[] VIVID_KEY = { 076 "#0000FF" , "#00FF00" , "#FF0000" , // 5, 9, 1 077 "#00FFFF" , "#FFFF00" , "#FF00FF" , // 7, 11, 3 078 "#00FF7F" , "#FF7F00" , "#7F00FF" , // 8, 12, 4 079 "#007FFF" , "#7FFF00" , "#FF007F" // 6, 10, 2 080 }; 081 082 /** 8.0.0.0 (2021/08/31) 内部カラーの優先順を、パステル、ビビッド に変更します。 */ 083// private static final String[] COLOR_KEY = new String[VIVID_KEY.length + PSTL_KEY.length]; 084 private static final String[] COLOR_KEY = new String[PSTL_KEY.length + VIVID_KEY.length]; 085 static { 086// System.arraycopy( VIVID_KEY, 0, COLOR_KEY, 0 , VIVID_KEY.length ); 087// System.arraycopy( PSTL_KEY , 0, COLOR_KEY, VIVID_KEY.length , PSTL_KEY.length ); 088 System.arraycopy( PSTL_KEY , 0, COLOR_KEY, 0 , PSTL_KEY.length ); 089 System.arraycopy( VIVID_KEY, 0, COLOR_KEY, PSTL_KEY.length , VIVID_KEY.length ); 090 } 091 092// 093// // 4.0.3.0 (2007/12/26) 色コードにPURPLE を追加 094// // 5.7.8.0 (2014/07/04) 透明追加 095// private static final List<Color> CLR_LIST = new ArrayList<>(); // 6.9.9.2 (2018/09/18) 色配列ではなく、リストに変更します。 096 /** staticイニシャライザ。読み取り専用(Collections.unmodifiableMap(Map))や、ConcurrentHashMap を使用しません。 */ 097// private static final Map<String,Color> CLR_MAP = new LinkedHashMap<>(); // 6.4.6.1 (2016/06/03) 登録順をキープします。 098 private static final Map<String,String> CLR_MAP = new HashMap<>(); // 7.0.1.1 (2018/10/22) 文字列として管理します。 099 static { 100 // java.awt.Color static 定義色 101 CLR_MAP.put( "BLUE" , "#0000FF" ); // Color.BLUE 102 CLR_MAP.put( "CYAN" , "#00FFFF" ); // Color.CYAN 103 CLR_MAP.put( "GRAY" , "#808080" ); // Color.GRAY 104 CLR_MAP.put( "GREEN" , "#008000" ); // Color.GREEN 105 CLR_MAP.put( "LIGHTGRAY" , "#D3D3D3" ); // Color.LIGHT_GRAY 106 CLR_MAP.put( "MAGENTA" , "#FF00FF" ); // Color.MAGENTA 107 CLR_MAP.put( "DARKGRAY" , "#A9A9A9" ); // Color.DARK_GRAY 108 CLR_MAP.put( "ORANGE" , "#FFA500" ); // Color.ORANGE 109 CLR_MAP.put( "PINK" , "#FFC0CB" ); // Color.PINK 110 CLR_MAP.put( "RED" , "#FF0000" ); // Color.RED 111 CLR_MAP.put( "YELLOW" , "#FFFF00" ); // Color.YELLOW 112 113// // 6.9.9.2 (2018/09/18) CSS1 / HTML3–4 / VGA の色名称の後ろに移動。 114// CLR_MAP.put( "WHITE" ,Color.WHITE ); 115// CLR_MAP.put( "BLACK" ,Color.BLACK ); 116// CLR_MAP.put( "TRANSPARENT" ,new Color( 255,255,255,0 ) ); // 5.7.8.0 (2014/07/04) 透明追加 117 118 // 6.0.2.1 (2014/09/26) CSS1 / HTML3–4 / VGA の色名称 追加 119 CLR_MAP.put( "LIME" , "#00FF00" ); 120 CLR_MAP.put( "AQUA" , "#00FFFF" ); 121 CLR_MAP.put( "SILVER" , "#C0C0C0" ); 122 CLR_MAP.put( "MAROON" , "#800000" ); // X11では、#B03060 123 CLR_MAP.put( "OLIVE" , "#808000" ); 124 CLR_MAP.put( "TEAL" , "#008080" ); 125 CLR_MAP.put( "NAVY" , "#000080" ); 126 CLR_MAP.put( "FUCHSIA" , "#FF00FF" ); 127 CLR_MAP.put( "PURPLE" , "#800080" ); // X11では、#A020F0 128 129// // 6.9.9.2 (2018/09/18) Map から、CLR_LIST を作成するのは、ここまで。 130// CLR_LIST.addAll( CLR_MAP.values() ); 131// 132// // 6.9.9.2 (2018/09/18) パステルカラー の色コード配列追加 133// for( final String col : PSTL_KEY ) { 134// CLR_LIST.add( Color.decode( col ) ); 135// } 136 137 CLR_MAP.put( "WHITE" , "#FFFFFF" ); // WHITE 138 CLR_MAP.put( "BLACK" , "#000000" ); // BLACK 139// CLR_MAP.put( "TRANSPARENT" , new Color( 255,255,255,0 ) ); // 5.7.8.0 (2014/07/04) 透明追加 140 CLR_MAP.put( "TRANSPARENT" , "rgba( 255,255,255,0 )" ); // 7.0.1.2 (2018/11/04) 透明 141 142 // 6.0.2.1 (2014/09/26) X11の色名称 追加 143 CLR_MAP.put( "ALICEBLUE" , "#F0F8FF" ); 144 CLR_MAP.put( "ANTIQUEWHITE" , "#FAEBD7" ); 145 CLR_MAP.put( "AQUAMARINE" , "#7FFFD4" ); 146 CLR_MAP.put( "AZURE" , "#F0FFFF" ); 147 CLR_MAP.put( "BEIGE" , "#F5F5DC" ); 148 CLR_MAP.put( "BISQUE" , "#FFE4C4" ); 149 CLR_MAP.put( "BLANCHEDALMOND" , "#FFEBCD" ); 150 CLR_MAP.put( "BLUEVIOLET" , "#8A2BE2" ); 151 CLR_MAP.put( "BROWN" , "#A52A2A" ); 152 CLR_MAP.put( "BURLYWOOD" , "#DEB887" ); 153 CLR_MAP.put( "CADETBLUE" , "#5F9EA0" ); 154 CLR_MAP.put( "CHARTREUSE" , "#7FFF00" ); 155 CLR_MAP.put( "CHOCOLATE" , "#D2691E" ); 156 CLR_MAP.put( "CORAL" , "#FF7F50" ); 157 CLR_MAP.put( "CORNFLOWERBLUE" , "#6495ED" ); 158 CLR_MAP.put( "CORNSILK" , "#FFF8DC" ); 159 CLR_MAP.put( "CRIMSON" , "#DC143C" ); 160 CLR_MAP.put( "DARKBLUE" , "#00008B" ); 161 CLR_MAP.put( "DARKCYAN" , "#008B8B" ); 162 CLR_MAP.put( "DARKGOLDENROD" , "#B8860B" ); 163 CLR_MAP.put( "DARKGREEN" , "#006400" ); 164 CLR_MAP.put( "DARKKHAKI" , "#BDB76B" ); 165 CLR_MAP.put( "DARKMAGENTA" , "#8B008B" ); 166 CLR_MAP.put( "DARKOLIVEGREEN" , "#556B2F" ); 167 CLR_MAP.put( "DARKORANGE" , "#FF8C00" ); 168 CLR_MAP.put( "DARKORCHID" , "#9932CC" ); 169 CLR_MAP.put( "DARKRED" , "#8B0000" ); 170 CLR_MAP.put( "DARKSALMON" , "#E9967A" ); 171 CLR_MAP.put( "DARKSEAGREEN" , "#8FBC8F" ); 172 CLR_MAP.put( "DARKSLATEBLUE" , "#483D8B" ); 173 CLR_MAP.put( "DARKSLATEGRAY" , "#2F4F4F" ); 174 CLR_MAP.put( "DARKTURQUOISE" , "#00CED1" ); 175 CLR_MAP.put( "DARKVIOLET" , "#9400D3" ); 176 CLR_MAP.put( "DEEPPINK" , "#FF1493" ); 177 CLR_MAP.put( "DEEPSKYBLUE" , "#00BFFF" ); 178 CLR_MAP.put( "DIMGRAY" , "#696969" ); 179 CLR_MAP.put( "DODGERBLUE" , "#1E90FF" ); 180 CLR_MAP.put( "FIREBRICK" , "#B22222" ); 181 CLR_MAP.put( "FLORALWHITE" , "#FFFAF0" ); 182 CLR_MAP.put( "FORESTGREEN" , "#228B22" ); 183 CLR_MAP.put( "GAINSBORO" , "#DCDCDC" ); 184 CLR_MAP.put( "GHOSTWHITE" , "#F8F8FF" ); 185 CLR_MAP.put( "GOLD" , "#FFD700" ); 186 CLR_MAP.put( "GOLDENROD" , "#DAA520" ); 187 CLR_MAP.put( "GREENYELLOW" , "#ADFF2F" ); 188 CLR_MAP.put( "HONEYDEW" , "#F0FFF0" ); 189 CLR_MAP.put( "HOTPINK" , "#FF69B4" ); 190 CLR_MAP.put( "INDIANRED" , "#CD5C5C" ); 191 CLR_MAP.put( "INDIGO" , "#4B0082" ); 192 CLR_MAP.put( "IVORY" , "#FFFFF0" ); 193 CLR_MAP.put( "KHAKI" , "#F0E68C" ); 194 CLR_MAP.put( "LAVENDER" , "#E6E6FA" ); 195 CLR_MAP.put( "LAVENDERBLUSH" , "#FFF0F5" ); 196 CLR_MAP.put( "LAWNGREEN" , "#7CFC00" ); 197 CLR_MAP.put( "LEMONCHIFFON" , "#FFFACD" ); 198 CLR_MAP.put( "LIGHTBLUE" , "#ADD8E6" ); 199 CLR_MAP.put( "LIGHTCORAL" , "#F08080" ); 200 CLR_MAP.put( "LIGHTCYAN" , "#E0FFFF" ); 201 CLR_MAP.put( "LIGHTGOLDENRODYELLOW" , "#FAFAD2" ); 202 CLR_MAP.put( "LIGHTGREEN" , "#90EE90" ); 203 CLR_MAP.put( "LIGHTPINK" , "#FFB6C1" ); 204 CLR_MAP.put( "LIGHTSALMON" , "#FFA07A" ); 205 CLR_MAP.put( "LIGHTSEAGREEN" , "#20B2AA" ); 206 CLR_MAP.put( "LIGHTSKYBLUE" , "#87CEFA" ); 207 CLR_MAP.put( "LIGHTSLATEGRAY" , "#778899" ); 208 CLR_MAP.put( "LIGHTSTEELBLUE" , "#B0C4DE" ); 209 CLR_MAP.put( "LIGHTYELLOW" , "#FFFFE0" ); 210 CLR_MAP.put( "LIMEGREEN" , "#32CD32" ); 211 CLR_MAP.put( "LINEN" , "#FAF0E6" ); 212 CLR_MAP.put( "MEDIUMAQUAMARINE" , "#66CDAA" ); 213 CLR_MAP.put( "MEDIUMBLUE" , "#0000CD" ); 214 CLR_MAP.put( "MEDIUMORCHID" , "#BA55D3" ); 215 CLR_MAP.put( "MEDIUMPURPLE" , "#9370DB" ); 216 CLR_MAP.put( "MEDIUMSEAGREEN" , "#3CB371" ); 217 CLR_MAP.put( "MEDIUMSLATEBLUE" , "#7B68EE" ); 218 CLR_MAP.put( "MEDIUMSPRINGGREEN" , "#00FA9A" ); 219 CLR_MAP.put( "MEDIUMTURQUOISE" , "#48D1CC" ); 220 CLR_MAP.put( "MEDIUMVIOLETRED" , "#C71585" ); 221 CLR_MAP.put( "MIDNIGHTBLUE" , "#191970" ); 222 CLR_MAP.put( "MINTCREAM" , "#F5FFFA" ); 223 CLR_MAP.put( "MISTYROSE" , "#FFE4E1" ); 224 CLR_MAP.put( "MOCCASIN" , "#FFE4B5" ); 225 CLR_MAP.put( "NAVAJOWHITE" , "#FFDEAD" ); 226 CLR_MAP.put( "OLDLACE" , "#FDF5E6" ); 227 CLR_MAP.put( "OLIVEDRAB" , "#6B8E23" ); 228 CLR_MAP.put( "ORANGERED" , "#FF4500" ); 229 CLR_MAP.put( "ORCHID" , "#DA70D6" ); 230 CLR_MAP.put( "PALEGOLDENROD" , "#EEE8AA" ); 231 CLR_MAP.put( "PALEGREEN" , "#98FB98" ); 232 CLR_MAP.put( "PALETURQUOISE" , "#AFEEEE" ); 233 CLR_MAP.put( "PALEVIOLETRED" , "#DB7093" ); 234 CLR_MAP.put( "PAPAYAWHIP" , "#FFEFD5" ); 235 CLR_MAP.put( "PEACHPUFF" , "#FFDAB9" ); 236 CLR_MAP.put( "PERU" , "#CD853F" ); 237 CLR_MAP.put( "PLUM" , "#DDA0DD" ); 238 CLR_MAP.put( "POWDERBLUE" , "#B0E0E6" ); 239 CLR_MAP.put( "ROSYBROWN" , "#BC8F8F" ); 240 CLR_MAP.put( "ROYALBLUE" , "#4169E1" ); 241 CLR_MAP.put( "SADDLEBROWN" , "#8B4513" ); 242 CLR_MAP.put( "SALMON" , "#FA8072" ); 243 CLR_MAP.put( "SANDYBROWN" , "#F4A460" ); 244 CLR_MAP.put( "SEAGREEN" , "#2E8B57" ); 245 CLR_MAP.put( "SEASHELL" , "#FFF5EE" ); 246 CLR_MAP.put( "SIENNA" , "#A0522D" ); 247 CLR_MAP.put( "SKYBLUE" , "#87CEEB" ); 248 CLR_MAP.put( "SLATEBLUE" , "#6A5ACD" ); 249 CLR_MAP.put( "SLATEGRAY" , "#708090" ); 250 CLR_MAP.put( "SNOW" , "#FFFAFA" ); 251 CLR_MAP.put( "SPRINGGREEN" , "#00FF7F" ); 252 CLR_MAP.put( "STEELBLUE" , "#4682B4" ); 253 CLR_MAP.put( "TAN" , "#D2B48C" ); 254 CLR_MAP.put( "THISTLE" , "#D8BFD8" ); 255 CLR_MAP.put( "TOMATO" , "#FF6347" ); 256 CLR_MAP.put( "TURQUOISE" , "#40E0D0" ); 257 CLR_MAP.put( "VIOLET" , "#EE82EE" ); 258 CLR_MAP.put( "WHEAT" , "#F5DEB3" ); 259 CLR_MAP.put( "WHITESMOKE" , "#F5F5F5" ); 260 CLR_MAP.put( "YELLOWGREEN" , "#9ACD32" ); 261 262// // 6.4.4.1 (2016/03/18) 数字に対応する 263// for( int i=0; i<CLR_ARY.length; i++ ) { 264// CLR_MAP.put( String.valueOf( i ) ,CLR_ARY[i] ); // 0:BLUE , 1:CYAN , 2:GRAY ・・・ を、Mapに登録しておきます。 265// } 266 267// // 6.9.9.2 (2018/09/18) 数字に対応する(配列からリストに変更の対応) 268// for( int i=0; i<CLR_LIST.size(); i++ ) { 269// CLR_MAP.put( String.valueOf( i ) ,CLR_LIST.get(i) ); // 0:BLUE , 1:CYAN , 2:GRAY ・・・ を、Mapに登録しておきます。 270// } 271 272 // 7.0.1.1 (2018/10/22) 色番号も、Mapに登録しておきます。 273 // ビビッドを、0~11 (V0~V11) , パステルを、11~23 (P0~P11) とします。 274 int cno = 0; 275 for( int i=0; i<VIVID_KEY.length; i++ ) { 276 CLR_MAP.put( String.valueOf( cno++ ) , VIVID_KEY[i] ); // 0~11 277 CLR_MAP.put( "V" + i , VIVID_KEY[i] ); // V0~V11 278 } 279 280 for( int i=0; i<PSTL_KEY.length; i++ ) { 281 CLR_MAP.put( String.valueOf( cno++ ) , PSTL_KEY[i] ); // 11~23 282 CLR_MAP.put( "P" + i , PSTL_KEY[i] ); // P0~P11 283 } 284 285 // 7.0.1.3 (2018/11/12) VIVIDとPASTELというキーワードに、V0とP0を割り当てておきます。 286 CLR_MAP.put( VIVID , VIVID_KEY[0] ); // V0 287 CLR_MAP.put( PASTEL , PSTL_KEY[0] ); // P0 288 } 289 290 /** 291 * デフォルトコンストラクターをprivateにして、 292 * オブジェクトの生成をさせないようにする。 293 * 294 */ 295 private ColorMap() {} 296 297 /** 298 * カラーキーワードより、Colorオブジェクトを作成します。 299 * 300 * 指定文字列は、java.awt.Color クラスのstatic フィールド名で指定します。 301 * BLACK , BLUE , CYAN , DARK_GRAY , GRAY , GREEN , LIGHT_GRAY , 302 * MAGENTA , ORANGE , PINK , RED , WHITE , YELLOW , PURPLE , TRANSPARENT(透明) が指定できます。 303 * 304 * 6.0.2.1 (2014/09/26) 以降では、CSS1/HTML3–4/VGA の色名称として、 305 * LIME , AQUA , SILVER , MAROON , OLIVE , TEAL , NAVY , FUCHSIA を追加。 306 * それと、X11の色名称 を追加しました。 307 * 308 * また、先頭に、# を付ける事で、#XXXXXX形式の16bitRGB表記 でも指定可能です。 309 * static フィールド名のMapを管理していますが、存在しない場合は、エラーになります。 310 * 311 * 色番号は、ビビッドを、0~11 (V0~V11) , パステルを、11~23 (P0~P11) とします。 312 * 313 * @og.rev 3.8.9.1 (2007/06/29) 新規作成 314 * @og.rev 4.1.1.0 (2008/02/04) CLR_MAP に存在しない場合はエラーにします。 315 * @og.rev 6.0.2.1 (2014/09/26) CSS1/HTML3–4/VGA の色名称 , X11の色名称 追加 316 * @og.rev 6.3.9.0 (2015/11/06) valueのnullチェックの仕方が間違っていた。 317 * @og.rev 6.4.6.1 (2016/06/03) 色番号の取得も対応しておきます。 318 * @og.rev 7.0.1.1 (2018/10/22) ビビッドとパステルの全24色を対象とします。 319 * @og.rev 7.0.6.4 (2019/11/29) 数値指定の色がMapにないとエラーになっていた個所を修正 320 * 321 * @param value java.awt.Color フィールドを示す文字列または、#XXXXXX形式の16bitRGB表記 322 * 323 * @return Colorオブジェクト 324 * @see java.awt.Color#BLACK 325 */ 326 public static Color getColorInstance( final String value ) { 327 // 6.3.9.0 (2015/11/06) valueのnullチェックの仕方が間違っていた。 328 if( value == null || value.length() == 0 ) { 329 final String errMsg = "色コードが指定されていません。" + CR // 6.4.6.1 (2016/06/03) 330 + "ColorMap=" + CLR_MAP.keySet().toString(); 331 throw new OgRuntimeException( errMsg ); 332 } 333 334 // 色コードの番号(#XXXXXX) Mapになければエラー 335 final String colCode ; 336 if( value.charAt(0) == '#' ) { 337 colCode = value; 338 } 339 else { 340 final String val = value.replaceAll( "_" , "" ).toUpperCase(Locale.JAPAN); 341 colCode = CLR_MAP.get( val ); 342 343 if( colCode == null ) { 344 // 7.0.6.4 (2019/11/29) 数値指定の色がMapにないとエラーになっていた個所を修正 345 try { 346 return getColorInstance( Integer.parseInt( val ) ); 347 } 348 catch( final NumberFormatException ex ) { // 数字ではない value をパースしているので、この、Exception は伝播不要。 349 final String errMsg = "指定の色コードはカラーマップに存在しません。 Color=[" + value + "]" + CR 350 + "ColorMap=" + CLR_MAP.keySet().toString(); 351 throw new OgRuntimeException( errMsg,ex ); 352 } 353 } 354 } 355 356 try { 357 return Color.decode( colCode ); 358 } 359 catch( final NumberFormatException ex ) { // 10進、8進、および16進の整数値に変換できない場合 360 final String errMsg = "指定の色コードのフォーマットが異なります(#XXXXXX形式の16bitRGB表記) Color=[" + value + "]" ; 361 throw new OgRuntimeException( errMsg,ex ); 362 } 363 364// Color clr = null ; // 6.4.6.1 (2016/06/03) 色番号で、再設定しているため、final をはずす。 365// 366// if( value.charAt(0) == '#' ) { 367// try { 368// clr = Color.decode( value ); 369// } 370// catch( final NumberFormatException ex ) { // 10進、8進、および16進の整数値に変換できない場合 371// final String errMsg = "指定の色コードのフォーマットが異なります Color=[" + value + "]" + CR 372// + "ColorMap=" + CLR_MAP.keySet().toString(); 373// throw new OgRuntimeException( errMsg,ex ); 374// } 375// } 376// else { 377// // "_"を削除するのは、LIGHT_GRAY などの表記を統一するため。 378// final String val = value.replaceAll( "_" , "" ).toUpperCase(Locale.JAPAN); 379// clr = CLR_MAP.get( val ); 380// if( clr == null ) { 381// // 6.4.6.1 (2016/06/03) 色番号の取得も対応しておきます。 382// // 0 ~ 10 は登録済みなので、それ以降の数字の繰り返しが出来ない 383// try { 384// clr = getColorInstance( Integer.parseInt( value ) ); 385// } 386// catch( final NumberFormatException ex ) { // 数字ではない value をパースしているので、この、Exception は伝播不要。 387// final String errMsg = "指定の色コードは使用できません Color=[" + value + "]" + CR 388// + "ColorMap=" + CLR_MAP.keySet().toString(); 389// throw new OgRuntimeException( errMsg,ex ); 390// } 391// } 392// } 393// return clr; 394 } 395 396 /** 397 * 指定の番号に対応した、色オブジェクトを返します。 398 * 399 * カラー番号は、ビビッドを、0~11 , パステルを、12~23 として登録しています。 400 * 従来のカラー番号と異なりますので、ご注意ください。 401 * 402 * 23を超えると、0 に戻ります。 403 * 404 * @og.rev 6.4.3.3 (2016/03/04) ViewForm_ImageTimeBar#uniqColor() メソッドから移動。 405 * @og.rev 6.9.9.2 (2018/09/18) 配列からリストに変更の対応 406 * @og.rev 7.0.1.1 (2018/10/22) ビビッドとパステルの全24色を対象とします。 407 * 408 * @param no 内部で管理している色番号 409 * @return 色オブジェクト 410 */ 411 public static Color getColorInstance( final int no ) { 412 try { 413 return Color.decode( COLOR_KEY[no % COLOR_KEY.length] ); 414 } 415 catch( final NumberFormatException ex ) { 416 final String errMsg = "指定の色番号の内部フォーマットがエラーです。no=[" + no + "] , code=[" + COLOR_KEY[no % COLOR_KEY.length] + "]" ; 417 throw new OgRuntimeException( errMsg,ex ); 418 } 419 } 420 421 /** 422 * 内部で管理している ColorMap のキー配列を返します。 423 * 424 * ここで返すのは、ビビッドを、0~11 , パステルを、12~23 として登録しています。 425 * この、#XXXXXX形式の16bitRGB表記 を返します。 426 * 427 * @og.rev 6.0.2.1 (2014/09/26) 新規追加 428 * @og.rev 7.0.1.1 (2018/10/22) ビビッドとパステルの全24色を対象とします。 429 * 430 * @param no 内部で管理している色番号 431 * @return キー配列 432 * @og.rtnNotNull 433 */ 434 public static String getColorKey( final int no ) { 435 return COLOR_KEY[no % COLOR_KEY.length]; 436 } 437 438 /** 439 * 内部で管理している ColorMap から、指定のキーに対する色コードを返します。 440 * 441 * 色名称でも返しますが、主に、色番号を想定しています。 442 * 引数が、文字列なのは、ビビッドを、0~11 (V0~V11) , パステルを、12~23 (P0~P11) 443 * として管理しているためです。 444 * 445 * 色コードは、#XXXXXX形式の16bitRGB表記です。 446 * 色マップに値が存在しない場合は、null を返します。 447 * 448 * @og.rev 7.0.1.1 (2018/10/22) ビビッドとパステルの全24色を対象とします。 449 * 450 * @param sno 内部で管理している色番号 451 * @return 色コード(対象の色がMapに存在しない場合は、nullを返します) 452 */ 453 public static String getColorKey( final String sno ) { 454// return CLR_MAP.get( sno ); 455 return getColorKey( sno , null ); 456 } 457 458 /** 459 * 内部で管理している ColorMap から、指定のキーに対する色コードを返します。 460 * 461 * 色名称でも返しますが、主に、色番号を想定しています。 462 * 引数が、文字列なのは、ビビッドを、0~11 (V0~V11) , パステルを、12~23 (P0~P11) 463 * として管理しているためです。 464 * 465 * 色コードは、#XXXXXX形式の16bitRGB表記です。 466 * 467 * @og.rev 7.0.1.1 (2018/10/22) ビビッドとパステルの全24色を対象とします。 468 * 469 * @param sno 内部で管理している色番号,色記号 470 * @param defCol 色マップに値が存在しない場合に返す色 471 * @return 色コード 472 */ 473 public static String getColorKey( final String sno , final String defCol ) { 474 return CLR_MAP.getOrDefault( sno , defCol ); 475 } 476 477 /** 478 * 内部で管理している ColorMap のキー配列を返します。 479 * 480 * ここで返すのは、ビビッドを、0~11 , パステルを、12~23 として登録しています。 481 * この、#XXXXXX形式の16bitRGB表記 を返します。 482 * 483 * @og.rev 6.0.2.1 (2014/09/26) 新規追加 484 * @og.rev 7.0.1.1 (2018/10/22) ビビッドとパステルの全24色を対象とします。 485 * 486 * @return キー配列 487 * @og.rtnNotNull 488 */ 489 public static String[] getColorKeys() { 490// return CLR_MAP.keySet().toArray( new String[CLR_MAP.size()] ); 491 return COLOR_KEY.clone(); 492 } 493 494 /** 495 * 引数に応じた内部で管理している ColorMap のキー配列を返します。 496 * 497 * colKey が null の場合は、#getColorKeys() と同じ、COLOR_KEYすべてを返します。 498 * colKey が、VIVID の場合は、#getVividKeys() を返します。 499 * colKey が、PASTEL の場合は、#getPastelKeys() を返します。 500 * それ以外は、CSVで分解して、各値を、#getColorKey(String,String) で求めた色コードの 501 * 配列を返します。 502 * 503 * @og.rev 7.0.1.3 (2018/11/12) 引数に応じたColorMap のキー配列を返す。 504 * 505 * @param colKey 内部で管理している色コード(nullの場合は、COLOR_KEYすべて。) 506 * @return キー配列 507 * @og.rtnNotNull 508 */ 509 public static String[] getColorKeys( final String colKey ) { 510 final String[] rtnCols ; 511 512 if( colKey == null || colKey.isEmpty() ) { rtnCols = getColorKeys(); } 513 else if( VIVID.equalsIgnoreCase( colKey ) ) { rtnCols = getVividKeys(); } 514 else if( PASTEL.equalsIgnoreCase( colKey ) ) { rtnCols = getPastelKeys(); } 515 else { 516 rtnCols = StringUtil.csv2Array( colKey ); 517 for( int i=0; i<rtnCols.length; i++ ) { 518 rtnCols[i] = getColorKey( rtnCols[i] , rtnCols[i] ); 519 } 520 } 521 522 return rtnCols ; 523 } 524 525// /** 526// * 指定の番号に対応した、ビビッドカラーの色オブジェクトを返します。 527// * 528// * #getColorInstance(int) とほぼ同じ機能で、返すのは、パステルカラーの色オブジェクトです。 529// * https://www.colordic.org/v/ 530// * 531// * 12色のビビッドカラーを、指定の番号に応じて、返します。 532// * 隣接する色は、できるだけ離れるようにしています。 533// * 534// * @og.rev 7.0.1.1 (2018/10/22) ビビッドとパステルの全24色を対象とします。 535// * @og.rev 7.0.1.3 (2018/11/12) 廃止 536// * 537// * @param no 内部で管理している色番号 538// * @return ビビッドカラーの色コード 539// */ 540// public static String getVividKey( final int no ) { 541// return VIVID_KEY[no % VIVID_KEY.length]; 542// } 543 544 /** 545 * 内部で管理している ビビッドカラー のキー配列を返します。 546 * 547 * @og.rev 7.0.1.1 (2018/10/22) ビビッドとパステルの全24色を対象とします。 548 * 549 * @return パステルカラーのキー配列 550 */ 551 public static String[] getVividKeys() { 552 return VIVID_KEY.clone(); 553 } 554 555// /** 556// * 指定の番号に対応した、パステルカラーの色オブジェクトを返します。 557// * 558// * #getColorInstance(int) とほぼ同じ機能で、返すのは、パステルカラーの色オブジェクトです。 559// * https://www.colordic.org/p/ 560// * 561// * 12色のパステルカラーを、指定の番号に応じて、返します。 562// * 隣接する色は、できるだけ離れるようにしています。 563// * 564// * @og.rev 6.9.9.2 (2018/09/18) パステルカラーの色オブジェクト 565// * @og.rev 7.0.1.3 (2018/11/12) 廃止 566// * 567// * @param no 内部で管理している色番号 568// * @return パステルカラーの色コード 569// */ 570// public static String getPastelKey( final int no ) { 571// return PSTL_KEY[no % PSTL_KEY.length]; 572// } 573 574 /** 575 * 内部で管理している パステルカラー のキー配列を返します。 576 * 577 * @og.rev 6.9.9.2 (2018/09/18) パステルカラーの色オブジェクト 578 * 579 * @return パステルカラーのキー配列 580 */ 581 public static String[] getPastelKeys() { 582 return PSTL_KEY.clone(); 583 } 584}