introductiontospectra.htm
来自「电脑图学(Computer Graphics)是资料结构、演算法与数学的应用」· HTM 代码 · 共 138 行
HTM
138 行
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<link rel="stylesheet" href="css/stdlayout.css" type="text/css">
<link rel="stylesheet" href="css/print.css" type="text/css">
<meta content="text/html; charset=gb2312" http-equiv="content-type">
<title>色谱简介</title>
</head>
<body>
<h3><a href="http://caterpillar.onlyfun.net/GossipCN/index.html">From
Gossip@caterpillar</a></h3>
<h1><a href="ComputerGraphics.htm">Computer Graphics: 色谱简介</a></h1>
色谱是指从一个颜色过渡另一个颜色的变化,这个变化中间可以经过多个颜色,也可以是两个颜色之间的变化,例如灰阶色谱就是由黑至白的双色渐层色谱。<br>
<br>
大部份的情况下我们可以直接使用RGB来指定绘图色彩,但制作色谱在指定渐层色或阴影色时相当有用,这边介绍简单的256色谱制作,其中两个颜色之间的变化共有240个色阶(编号0至239),剩下的16个色阶(编号240到255)则填上16色模式。<br>
<h2>双色渐层色谱</h2>
双色渐层色谱两个颜色之间的渐层变化,这样的渐层变化适用于阴影色彩的指定,这边介绍的色谱起始与结束颜色的指定可以是16色模式中的0~7号颜色。<br>
<h2>多色渐层色谱</h2>
多色渐层色谱是指两个颜色的中间还经过数个颜色的色谱变化,例如指定蓝色与洋红色的话,中间会经过蓝色->绿色->黄色->红色- >洋红色等颜色,中间任两色之间以渐层的方式过渡。<br>
<h2>多色循环色谱</h2>
如果您将多色渐层色谱的起始与终止颜色设定为相同的话,就是循环色谱了,这种色谱通常会使用圆来强调出循环变化。 <br>
<br>
以下是使用Java所制作的色谱变化程式参考:<br>
<ul>
<li> Spectra.java
</li>
</ul>
<pre>package onlyfun.caterpillar;<br> <br>import java.applet.*; <br>import java.awt.*; <br>import java.awt.event.*; <br>import javax.swing.JApplet;<br> <br>public class Spectra extends JApplet { <br> protected static final Color[]Color16 <br> ={new Color( 0, 0, 0),new Color( 0, 0,255), <br> new Color( 0,255, 0),new Color( 0,255,255), <br> new Color(255, 0, 0),new Color(255, 0,255), <br> new Color(255,255, 0),new Color(255,255,255), <br> new Color(192,192,192),new Color(128,128,255), <br> new Color(128,255,128),new Color(128,255,255), <br> new Color(255,128,128),new Color(255,128,255), <br> new Color(255,255,128),new Color(128,128,128)}; <br> protected Color[] FrColor = new Color[256]; <br> <br> // 双色渐层色谱 <br> public void setShdSpectra(int c0, int c1) { <br> int[]rgb=new int[3]; <br> int[]col0=new int[3]; <br> int[]col1=new int[3]; <br><br> c0=c0%8;c1=c1%8; <br> col0[0]=(c0>>2)&1;col0[1]=(c0>>1)&1;col0[2]=c0&1; <br> col1[0]=(c1>>2)&1;col1[1]=(c1>>1)&1;col1[2]=c1&1; <br><br> for(int i=0;i<240;i++) { <br> for(int j=0;j<3;j++) <br> rgb[j]=16+col0[j]*(239-i)+col1[j]*i; <br> FrColor[i]=new Color(rgb[0],rgb[1],rgb[2]); <br> } <br> <br> for(int i=240;i<256;i++) <br> FrColor[i]=Color16[i-240]; <br> } <br><br> // 多色渐层色谱 <br> public void setCycSpectra(int c0,int c1) { <br> int d; <br> int[]n={0,2,1,4,5,3}; <br> int[]rgb=new int[6]; <br> int[][]st=<br> {{2,4,0},{4,0,2},{3,5,1},{0,2,4},{1,3,5},{5,1,3}}; <br> <br> c0=c0%8;c1=c1%8; <br> if((c0==0)||(c0==7)) <br> c0=1; <br> if((c1==0)||(c1==7)) <br> c1=1; <br> if(c0==c1) <br> d=6; <br> else <br> d=(n[c1-1]-n[c0-1]+6)%6; <br> <br> for(int i=0;i<240;i++) { <br> for(int j=0;j<3;j++) <br> rgb[j]=<br> getColor((i/(240/d)+st[c0-1][j])%6,i%(240/d),d); <br> FrColor[i]=new Color(rgb[0],rgb[1],rgb[2]); <br> } <br> <br> for(int i=240;i<256;i++) <br> FrColor[i]=Color16[i-240]; <br> } <br> <br> private int getColor(int i,int j,int d) { <br> switch(i) { <br> case 0:return 255; <br> case 1:return 255-d*j; <br> case 2:return 15+d; <br> case 3:return 15+d; <br> case 4:return 15+d+d*j; <br> case 5:return 255; <br> } <br> return 0; <br> } <br> <br> public void paint(Graphics g) { <br> setBackground(Color.white); <br><br> setShdSpectra(0, 7); <br> for(int i = 0; i < 256; i++) { <br> g.setColor(FrColor[i]); <br> g.drawLine(30+i, 30, 30+i, 120); <br> } <br><br> setCycSpectra(2, 8); <br> for(int i = 0; i < 256; i++) { <br> g.setColor(FrColor[i]); <br> g.drawLine(30+i, 150, 30+i, 240); <br> } <br> } <br>} </pre>
<br>
<img style="width: 265px; height: 221px;" alt="" src="images/introductionToSpectra-1.jpg"><br>
<br>
<br>
</body>
</html>
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?