RGB色彩,在自然界中肉眼所能看到的任何色彩都可以由红(R)、绿(G)、蓝(B)这三种色彩混合叠加而成,因此我们只要递增递减的修改其特定值就能得到相应的渐变效果。

运行效果:(图1)

运行5秒后:(图2)

Java源代码:

 import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.image.BufferedImage; import javax.swing.JFrame;
import javax.swing.JPanel; /**
* 图片显示面板类<br>
* 颜色渐变效果测试
*
* @author WQL
*
*/
public class ImagePanel extends JPanel {
private static final long serialVersionUID = 1L;
private int height = 350; // 高度
private int width = 600; // 宽度
private BufferedImage bufImg = null; // 在该BufferedImage对象中绘制颜色 /**
* 构造方法
*/
public ImagePanel() {
this.setPreferredSize(new Dimension(width, height)); // 设置首选大小
} /**
* 初始化颜色
*/
private void initColor() {
bufImg = new BufferedImage(width, height, BufferedImage.TYPE_4BYTE_ABGR);// 实例化BufferedImage
Graphics g = bufImg.getGraphics(); // 获取图片的Graphics
int w = width / 6; // 分成六个部分进行绘制
for (int i = 0; i < w; i++) {
int x = 0;
int d = (int) (i * (255.0 / w)); // 使d从0递增到255,实际可能只是接近255
// 画第一部分颜色---红色到黄色
g.setColor(new Color(255, d, 0)); // 设置颜色
g.drawLine(i + w * x, 0, i + w * x++, height); // 画直线---一条单色竖线
// 画第二部分颜色---黄色到绿色
g.setColor(new Color(255 - d, 255, 0));
g.drawLine(i + w * x, 0, i + w * x++, height);
// 画第三部分颜色---绿色到青色
g.setColor(new Color(0, 255, d));
g.drawLine(i + w * x, 0, i + w * x++, height);
// 画第四部分颜色---青色到蓝色
g.setColor(new Color(0, 255 - d, 255));
g.drawLine(i + w * x, 0, i + w * x++, height);
// 画第五部分颜色---蓝色到洋红色
g.setColor(new Color(d, 0, 255));
g.drawLine(i + w * x, 0, i + w * x++, height);
// 画第六部分颜色---洋红色到红色
g.setColor(new Color(255, 1, 255 - d));
g.drawLine(i + w * x, 0, i + w * x++, height);
}
repaint(); // 重绘
try {
System.out.println("5秒后绘制黑色分隔线..");
Thread.sleep(5000); // 线程休息
} catch (InterruptedException e) {
e.printStackTrace();
}
// 绘制黑线来隔开六个部分
System.out.println("开始绘制黑色分隔线...");
g.setColor(Color.BLACK); // 设置黑色
for (int i = 1; i < w; i++) {
g.drawLine(i * w, 0, i * w, height); // 画直线
}
repaint(); // 重绘
} /**
* 绘制图片
*/
public void paint(Graphics g) {
g.drawImage(bufImg, 0, 0, null); // 画图片
} /**
* 主方法
*/
public static void main(String[] args) {
JFrame f = new JFrame("颜色渐变效果"); // 实例化一个窗体
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // 设置窗体关闭时退出程序
ImagePanel imgPanel = new ImagePanel(); // 实例化图片显示面板
f.getContentPane().add(imgPanel); // 添加到窗体
f.pack(); // 根据窗体子组件的首选大小进行调整
f.setLocationRelativeTo(null); // 设置窗体在屏幕中居中显示
f.setVisible(true); // 显示窗体
imgPanel.initColor(); // 绘制颜色
}
}

Java实现颜色渐变效果的更多相关文章

  1. Android开发---如何操作资源目录中的资源文件3--圆角边框、背景颜色渐变效果、边框颜色

    Android开发---如何操作资源目录中的资源文件3 效果图 1.圆角边框 2.背景颜色渐变效果 1.activity_main.xml 描述: 定义了一个shape资源管理按钮 <?xml ...

  2. Android Textview实现文字颜色渐变效果

    最近做应用的时候遇到一个需求,一行文字的颜色需要一个渐变效果 如上所有 从左到有逐渐变化,自己写了一个demo实现上述效果 package com.huwei.example.test; import ...

  3. iOS 滑动页面标题切换颜色渐变效果

    话不多说,直接上图,要实现类似如下效果. 这个效果非常常见,这里着重讲讲核心功能 封装顶部的PageTitleView 封装构造函数 封装构造函数,让别人在创建对象时,就传入其实需要显示的内容 fra ...

  4. java 随机颜色

    用HSV模型来实现颜色的随机,然后转为RGB模型 色相(H)是色彩的基本属性,就是平常所说的颜色名称,如红色.黄色等. 饱和度(S)是指色彩的纯度,越高色彩越纯,低则逐渐变灰,取0-100%的数值. ...

  5. Javascript,颜色渐变效果的处理

    在搭建博主博客的时候,寻思着做一些效果,看到菜单,就想是不是可以做一下颜色的渐变,增加一点动态的感觉.有个jquery的插件,效果相当不错,不过博主还是打算自立更生写一下,看看能不能实现. 下面就是博 ...

  6. java 十六进制颜色对照表

    我们在编程中常常用到十六进制颜色码.   下面是颜色码对照表-英文名称-十六进制-RGB:   英文代码      形像颜色       HEX格式         RGB格式 LightPink 浅 ...

  7. [unity3d程序] 颜色渐变效果

    研究了下,颜色变化时遵从RGB圆环(就是说颜色条对接一下成环)路径最小变化原则.举个例子,加入ABCDE四个颜色点,并且A和E在同一点(转了一圈)设定从A变化到C的话,有两种路径,一种ABC,还一种A ...

  8. 【Android 界面效果20】Android GradientDrawable类的详解,设置activity的背景颜色渐变效果

    看到这个例子的标题RoundRects,我的第一感觉是介绍RoundRectShape, 打开例子看了代码却是使用GradientDrawable来实现的. GradientDrawable 支持使用 ...

  9. Android GradientDrawable类的详解,设置activity的背景颜色渐变效果

    看到这个例子的标题RoundRects,我的第一感觉是介绍RoundRectShape, 打开例子看了代码却是使用GradientDrawable来实现的. GradientDrawable 支持使用 ...

随机推荐

  1. h5上传图片

    1.如何在H5上传图片 使用FileReader 2.FileReader接口 传图片我们只用到readAsDataURL 3.FileReader接口事件 传图片我们只用到onload 4.如何使用 ...

  2. 3.创建基本的AngularJS应用

    1.1.模块 AngularJS引入了代表应用程序组件的模块的概念.模块提供命名空间,以基于模型的名称来引用指令,范围和其他组件.使得包装和再利用应用程序的部件更容易. AngularJS中,每个视图 ...

  3. transition第一次没有效果

    原因很简单因为一开始没有设定要改变的样式的初始值 例如你要改的是top:-50; 那一开始就要设top:0; 不然第一次不会有动画效果移动

  4. powerdesigner反向

    1.Could not initial JVM不能初始化 :要求安装32位的JDK,把path指向32的安装目录 2.Non SQL Error : Could not load class orac ...

  5. redis配置文件redis.conf参数说明

    redis配置文件redis.conf参数说明 (2013-01-09 21:20:40)转载▼ 标签: redis配置 redis.conf 配置说明 杂谈 分类: nosql # By defau ...

  6. CSS——display和float

    1.display 属性规定元素应该生成的框的类型. 值 描述 none 此元素不会被显示. block 此元素将显示为块级元素,此元素前后会带有换行符. inline 默认.此元素会被显示为内联元素 ...

  7. Node.js——Async

    一:流程控制 为了适应异步编程,减少回调的嵌套,我尝试了很多库.最终觉得还是async最靠谱. 地址:https://github.com/caolan/async Async的内容分为三部分: 流程 ...

  8. C#之基类及接口

    Component类: Component是公共语言运行库中按引用封送的所有组件的基类.Component提供IComponent接口的基实现并启用应用程序之间的对象共享. https://msdn. ...

  9. ACM/ICPC 之 暴力打表(求解欧拉回路)-编码(POJ1780)

    ///找到一个数字序列包含所有n位数(连续)一次且仅一次 ///暴力打表 ///Time:141Ms Memory:2260K #include<iostream> #include< ...

  10. JS中数组Array的用法示例介绍 (转)

    new Array() new Array(len) new Array([item0,[item1,[item2,...]]] 使用数组对象的方法: var objArray=new Array() ...