VB与Java颜色值的转换

正常的 RGB 颜色的有效范围,是从 0 到 16,777,215 (&HFFFFFF&)。每种颜色的设置值(属性或参数)都是一个四字节的整数。对于这个
范围内的数,其高字节都是 0,而低三个字节,从最低字节到第三个字节,分别定义了红、绿、蓝三种颜色的值。红、绿、蓝三种成分都
是用 0 到 255 (&HFF) 之间的数表示。因此,可以用十六进制数按照下述语法来指定颜色:

&HBBGGRR&

BB 指定蓝颜色的值,GG 指定绿颜色的值,RR 指定红颜色的值。每个数段都是两位十六进制数,即从 00 到 FF。&H808080&将最高位设置
为 1,就改变了颜色值的含义:颜色值不再代表一种 RGB 颜色,而是一种从 Windows"控制面板"指定的环境范围颜色。这些数值对应的系统
颜色范围是从 &H80000000 到 &H80000015。 以下就是这些特殊的系统颜色值及其含义:

Constant

Value

Description

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中的颜色的整数值是这样组成的:0~7位是蓝色值, 8~15位是绿色值, 16~23位是红色值, 24~31位是Alpha值。一个标准的RGB
值转成Java的需要设置最高8位为FF(默认的Alpha值)。此外,对于像VB中这些特殊的系统颜色来说,Java中的SystemColor被用来处理
各个操作系统不同的系统颜色。

    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通过静态域初始化系统颜色的数组,我们可以利用它的初始化结果作为当前操作系统的系统颜色集合,来完成VB颜色到Java颜色的转换。

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;}}

简单跑了下,不知道是否正确,有没有人有写这方面代码的经验?

转载于:https://www.cnblogs.com/xiaomaohai/archive/2012/10/14/6157800.html

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Dreamweaver MX显示汉字为乱码的解决方法

推荐几种解决方法:a.在“编辑”&#xff0d;“首选参数”中设置“新建文档”->默认编码&#xff1a;utf-8或者gb2312&#xff08;取决于你的网页编码&#xff09;&#xff0c;并勾选“当打开未指定编码的现有文件时使用”;此时每次打开文件时都没有乱码了&#xff0c;也不额…

RDIFramework.NET(.NET快速开发框架) 答客户问(2014-02-23)

1、框架的部署安装&#xff0c;服务器端和客户端 答&#xff1a;开发版以上版本支持SOA模式&#xff0c;也即真正的面向服务端的模式&#xff0c;在实际使用过程中&#xff0c;可根据项目的实际需要&#xff0c;来选择性的进行部署&#xff08;直连模式或SOA模式&#xff09;&a…

I2C通信——I2C通信的基础介绍

以下内容源于朱有鹏嵌入式课程的学习与整理&#xff0c;如有侵权请告知删除 。 参考博客 SPI、I2C、UART&#xff08;即串口&#xff09;三种串行总线详解_天糊土的博客-CSDN博客_串口总线 s5pv210 I2C通信详解 - biaohc - 博客园 嵌入式常用技术概览之IIC(I2C)_C_XianRen的博…

IBM SOA[ESB,BPM,Portal等]基础架构图解

最近公司对众多的异构系统进行SOA化&#xff0c;产品选型为IBM的Websphere系列产品的WMB&#xff0c;BPM&#xff0c;Portal&#xff0c;LDAP等技术&#xff0c;根据具体的描述&#xff0c;连猜带蒙的画了个系统协作图&#xff0c;有不对的地方欢迎大家拍砖....谢谢。 SOA详细技…

高精度计算

多精度计算 许剑伟 2006-10-31 一、多&#xff08;高&#xff09;精度数据表示法&#xff1a; 用字符型数组表示一个高精度的数&#xff0c;以下示范数据结构&#xff0c;左边为数组底端&#xff08;或说内存底端&#xff09;&#xff0c;下表以底端高位&#xff08;或说高端…

css3图标悬停导航菜单

纯css3制作的图标悬停导航菜单&#xff0c;包含9中不同的悬停风格&#xff0c;干净大气。转载于:https://blog.51cto.com/jimanyu/1362823

I2C通信——S5PV210的I2C通信简单案例

以下内容源于朱有鹏嵌入式课程的学习与整理&#xff0c;如有侵权请告知删除。 参考内容 I2C子系统详解3——I2C总线驱动层代码分析_天糊土的博客-CSDN博客 一、S5PV210的I2C控制器 1、为什么需要控制器&#xff1f; 通信双方通过时序协调工作&#xff0c;但是时序比较复杂而…

POJ 2718

题意&#xff1a;给出最多10个数字&#xff0c;将它们划分为两个整数&#xff0c;求差异值最小的值&#xff08;除非只有一位数&#xff0c;否则不允许出现先导0&#xff09; 题解&#xff1a;很显然如果总共有n个数&#xff0c;必然有一个整数长n/2,另一个长n-n/2&#xff0c;…

转:跨dll操作fopen的返回值导致出错

从老板的blog那里抄来的&#xff0c;一个很神奇的bug&#xff0c;雷死&#xff1a; 源地址http://www.cnblogs.com/len3d/p/3406294.html 在设置成/MD 或 /MDd 不会导致出错 设置成/MT 或 /MTd 的情况下会导致出错 看了CRT的实现&#xff0c;估计是因为fopen创建了CriticalSect…

HDUOJ---1879 继续畅通工程

继续畅通工程 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 11473 Accepted Submission(s): 5026 Problem Description省政府“畅通工程”的目标是使全省任何两个村庄间都可以实现公路交通&#xff08;但不一…

windows批量关机

建立bat文件,内容如下&#xff1a;net use \\192.168.1.1\ipc$ "admin" /user:"administrator" shutdown -s -f -t 20 -m \\192.168.2.2 net use \\192.168.1.2\ipc$ "admin" /user:"administrator" shutdown -s -f -t 20 -m \\192.16…

动态载入树 (ASP+数据库)

ASPACCESS 在数据量达100万条记录下&#xff0c;载入速度仍然惊人.... // 网上转载. 忘了作者... : ) //********************** Index.asp ************************// 1<%LANGUAGE"VBSCRIPT"CODEPAGE"936"%>2<%OptionExplicit%>3<htm…

ADC——S5PV210的ADC的理论与操作

以下内容源于朱有鹏嵌入式课程的学习与整理&#xff0c;如有侵权请告知删除。 参考博客 s5pv210 AD转换 - biaohc - 博客园 一、ADC的相关概念 1、量程&#xff08;模拟量的输入范围&#xff09; ADC只能输入电压信号&#xff0c;其他种类的模拟信号要经过传感器的转换&#x…

创建新的swap文件

1&#xff09;决定swap文件的大小&#xff0c;这个一般参照要安装软件的说明2&#xff09;以root用户登录&#xff0c;执行以下命令创建一个swap文件dd if/dev/zero of/swapfile bs1M count1024if后面跟的是设备&#xff0c;不确定可以通过”df –h”命令来查看有哪些硬盘设备。…

【洛谷 2661】信息传递

题目描述 有 nn 个同学&#xff08;编号为 11 到 nn &#xff09;正在玩一个信息传递的游戏。在游戏里每人都有一个固定的信息传递对象&#xff0c;其中&#xff0c;编号为 ii 的同学的信息传递对象是编号为 T_iTi​ 的同学。 游戏开始时&#xff0c;每人都只知道自己的生日。之…

kernel移植——从三星官方内核开始移植

以下内容源于朱有鹏嵌入式课程的学习&#xff0c;如有侵权&#xff0c;请告知删除。 一、内核移植初体验 1、获取三星官方的内核源码包 三星SMDKV210开发板附带的光盘里有内核源码包&#xff1a;下载地址。 2、构建移植环境 &#xff08;1&#xff09;Windows下建立SI工程&…

Android中实时视频传输(摄像头实时视频传输)解决方案二

为什么80%的码农都做不了架构师&#xff1f;>>> 1、使用FFMpeg进行视频采集&#xff0c;使用Live555进行RTP传输&#xff0c;使用VideoView进行播放。 csdn提到&#xff1a;重载FrameSource&#xff0c;写一个服务类&#xff0c;可以从FrameSource的派生类读取帧数…

很好的 .NET 换肤软件 IrisSkin

当前.NET下提供换肤的控件有IrisSkin和DotNetSkin。但是DotNetSkin提供的Demo版本&#xff0c;功能有限制&#xff0c;一时找不到可以破解的完全版。IrisSkin 的功能不比DotNetSkin差&#xff0c;而且使用简单。不需要原始文件&#xff0c;只需要dll文件和皮肤文件。详细信息可…

定时器——S5PV210定时器的理论与操作

以下内容源于朱有鹏嵌入式课程的学习与整理&#xff0c;如有侵权请告知删除。 一、定时器简介 1、定时器的含义 定时器作为SoC的外设&#xff0c;主要用来实现定时执行代码的功能&#xff0c;它相对SoC而言&#xff0c;就像闹钟相对于人的意义一样。定时器内部的计数器每隔一个…

gson的简单使用方法

gson和其他现有java json类库最大的不同时gson需要序列化得实体类不需要使用annotation来标识需要序列化得字段&#xff0c;同时gson又可以通过使用annotation来灵活配置需要序列化的字段。 下面是一个简单的例子&#xff1a; publicclassPerson {privateString name;privatein…