VB与Java颜色值的转换
&HBBGGRR&
BB 指定藍(lán)顏色的值,GG 指定綠顏色的值,RR 指定紅顏色的值。每個數(shù)段都是兩位十六進(jìn)制數(shù),即從 00 到 FF。&H808080&將最高位設(shè)置 為 1,就改變了顏色值的含義:顏色值不再代表一種 RGB 顏色,而是一種從 Windows"控制面板"指定的環(huán)境范圍顏色。這些數(shù)值對應(yīng)的系統(tǒng) 顏色范圍是從 &H80000000 到 &H80000015。 以下就是這些特殊的系統(tǒng)顏色值及其含義:
| vbScrollBars | 0x80000000 | Scroll bar color |
| vbDesktop | 0x80000001 | Desktop color |
| vbActiveTitleBar | 0x80000002 | Color of the title bar for the active window |
| vbInactiveTitleBar | 0x80000003 | Color of the title bar for the inactive window |
| vbMenuBar | 0x80000004 | Menu background color |
| vbWindowBackground | 0x80000005 | Window background color |
| vbWindowFrame | 0x80000006 | Window frame color |
| vbMenuText | 0x80000007 | Color of text on menus |
| vbWindowText | 0x80000008 | Color of text in windows |
| vbTitleBarText | 0x80000009 | Color of text in caption, size box, and scroll arrow |
| vbActiveBorder | 0x8000000A | Border color of active window |
| vbInactiveBorder | 0x8000000B | Border color of inactive window |
| vbApplicationWorkspace | 0x8000000C | Background color of multiple-document interface (MDI) applications |
| vbHighlight | 0x8000000D | Background color of items selected in a control |
| vbHighlightText | 0x8000000E | Text color of items selected in a control |
| vbButtonFace | 0x8000000F | Color of shading on the face of command buttons |
| vbButtonShadow | 0x80000010 | Color of shading on the edge of command buttons |
| vbGrayText | 0x80000011 | Grayed (disabled) text |
| vbButtonText | 0x80000012 | Text color on push buttons |
| vbInactiveCaptionText | 0x80000013 | Color of text in an inactive caption |
| vb3DHighlight | 0x80000014 | Highlight color for 3-D display elements |
| vb3DDKShadow | 0x80000015 | Darkest shadow color for 3-D display elements |
| vb3DLight | 0x80000016 | Second lightest 3-D color after?vb3DHighlight |
| vbInfoText | 0x80000017 | Color of text in ToolTips |
| vbInfoBackground | 0x80000018 | Background color of ToolTips |
首先,Java中的顏色的整數(shù)值是這樣組成的:0~7位是藍(lán)色值, 8~15位是綠色值, 16~23位是紅色值, 24~31位是Alpha值。一個標(biāo)準(zhǔn)的RGB 值轉(zhuǎn)成Java的需要設(shè)置最高8位為FF(默認(rèn)的Alpha值)。此外,對于像VB中這些特殊的系統(tǒng)顏色來說,Java中的SystemColor被用來處理 各個操作系統(tǒng)不同的系統(tǒng)顏色。
public final static SystemColor desktop = new SystemColor((byte)DESKTOP);public final static SystemColor activeCaption = new SystemColor((byte)ACTIVE_CAPTION);public final static SystemColor activeCaptionText = new SystemColor((byte)ACTIVE_CAPTION_TEXT);...private static int[] systemColors;static {updateSystemColors();}/*** Called from <init> & toolkit to update the above systemColors cache.*/private static void updateSystemColors() {if (!GraphicsEnvironment.isHeadless()) {Toolkit.getDefaultToolkit().loadSystemColors(systemColors);}}private SystemColor(byte index) {super(0, 0, 0);value = index;}public int getRGB() {return systemColors[value];} SystemColor通過靜態(tài)域初始化系統(tǒng)顏色的數(shù)組,我們可以利用它的初始化結(jié)果作為當(dāng)前操作系統(tǒng)的系統(tǒng)顏色集合,來完成VB顏色到Java顏色的轉(zhuǎn)換。 package com.cdai.jd;import java.awt.SystemColor; import java.util.HashMap;public class SystemColorTest {public static void main(String[] args) {SystemColorTest tester = new SystemColorTest();// 1.Test for Palette colorSystem.out.println(tester.convertVB2JavaColor(0x80000007) == SystemColor.menuText.getRGB());// 2.Test for System colorSystem.out.println(tester.convertVB2JavaColor(0x004207) == (0xFF | 0x4207));// 3.Test for invalid input argumenttry {System.out.println(tester.convertVB2JavaColor(0x8100000A));} catch (Exception e) {System.out.println("Expect exception here.");}}private static HashMap<Integer, Integer> VB2JavaSystemColorMapping = new HashMap<Integer, Integer>();/*** Color constants refer to:* http://msdn.microsoft.com/en-us/library/office/gg264801.aspx*/static {VB2JavaSystemColorMapping.put(0x80000000, SystemColor.scrollbar.getRGB());VB2JavaSystemColorMapping.put(0x80000001, SystemColor.desktop.getRGB());VB2JavaSystemColorMapping.put(0x80000002, SystemColor.activeCaption.getRGB());VB2JavaSystemColorMapping.put(0x80000003, SystemColor.inactiveCaption.getRGB());VB2JavaSystemColorMapping.put(0x80000004, SystemColor.menu.getRGB());VB2JavaSystemColorMapping.put(0x80000005, SystemColor.window.getRGB());VB2JavaSystemColorMapping.put(0x80000006, SystemColor.scrollbar.getRGB()); //Window frame color?VB2JavaSystemColorMapping.put(0x80000007, SystemColor.menuText.getRGB());VB2JavaSystemColorMapping.put(0x80000008, SystemColor.windowText.getRGB());VB2JavaSystemColorMapping.put(0x80000009, SystemColor.activeCaptionText.getRGB());VB2JavaSystemColorMapping.put(0x8000000A, SystemColor.activeCaptionBorder.getRGB());VB2JavaSystemColorMapping.put(0x8000000B, SystemColor.inactiveCaptionBorder.getRGB());VB2JavaSystemColorMapping.put(0x8000000C, SystemColor.scrollbar.getRGB()); //Background color of multiple-document interface (MDI) applications?VB2JavaSystemColorMapping.put(0x8000000D, SystemColor.textHighlight.getRGB());VB2JavaSystemColorMapping.put(0x8000000E, SystemColor.textHighlightText.getRGB());VB2JavaSystemColorMapping.put(0x8000000F, SystemColor.scrollbar.getRGB()); //Color of shading on the face of command buttons?VB2JavaSystemColorMapping.put(0x80000010, SystemColor.scrollbar.getRGB()); //Color of shading on the edge of command buttons?VB2JavaSystemColorMapping.put(0x80000011, SystemColor.textInactiveText.getRGB());VB2JavaSystemColorMapping.put(0x80000012, SystemColor.controlText.getRGB());VB2JavaSystemColorMapping.put(0x80000013, SystemColor.inactiveCaptionText.getRGB());VB2JavaSystemColorMapping.put(0x80000014, SystemColor.controlHighlight.getRGB());VB2JavaSystemColorMapping.put(0x80000015, SystemColor.controlDkShadow.getRGB());VB2JavaSystemColorMapping.put(0x80000016, SystemColor.controlLtHighlight.getRGB());VB2JavaSystemColorMapping.put(0x80000017, SystemColor.infoText.getRGB());VB2JavaSystemColorMapping.put(0x80000018, SystemColor.info.getRGB());}/*** Convert color hex value in VB to Java color hex.* * @param vbColorHex 0x80000000 - 0x80000018 for VB system color, * 0x00AB1234 for palette color* * @return Bits 24-31 are alpha (FF as default), * 16-23 are red, * 8-15 are green, * 0-7 are blue*/public int convertVB2JavaColor(int vbColorHex) {int javaColorHex;int highByte = (vbColorHex >>> 24);if (highByte == 0) { // Palette color if high byte is 0.javaColorHex = 0xFF | vbColorHex;}else if (highByte == 128) { // System color if highest bit is 1javaColorHex = VB2JavaSystemColorMapping.get(vbColorHex);}else { throw new IllegalArgumentException("Illegal hex color argument: " + vbColorHex);}return javaColorHex;}}
簡單跑了下,不知道是否正確,有沒有人有寫這方面代碼的經(jīng)驗?
轉(zhuǎn)載于:https://www.cnblogs.com/xiaomaohai/archive/2012/10/14/6157800.html
總結(jié)
以上是生活随笔為你收集整理的VB与Java颜色值的转换的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: rabbit MQ 的环境及命令使用(一
- 下一篇: 使用maven时报错Dynamic We