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:&nbsp;色谱简介</a></h1>







色谱是指从一个颜色过渡另一个颜色的变化,这个变化中间可以经过多个颜色,也可以是两个颜色之间的变化,例如灰阶色谱就是由黑至白的双色渐层色谱。<br>
<br>
大部份的情况下我们可以直接使用RGB来指定绘图色彩,但制作色谱在指定渐层色或阴影色时相当有用,这边介绍简单的256色谱制作,其中两个颜色之间的变化共有240个色阶(编号0至239),剩下的16个色阶(编号240到255)则填上16色模式。<br>
<h2>双色渐层色谱</h2>
双色渐层色谱两个颜色之间的渐层变化,这样的渐层变化适用于阴影色彩的指定,这边介绍的色谱起始与结束颜色的指定可以是16色模式中的0~7号颜色。<br>
<h2>多色渐层色谱</h2>
多色渐层色谱是指两个颜色的中间还经过数个颜色的色谱变化,例如指定蓝色与洋红色的话,中间会经过蓝色-&gt;绿色-&gt;黄色-&gt;红色- &gt;洋红色等颜色,中间任两色之间以渐层的方式过渡。<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&gt;&gt;2)&amp;1;col0[1]=(c0&gt;&gt;1)&amp;1;col0[2]=c0&amp;1; <br>        col1[0]=(c1&gt;&gt;2)&amp;1;col1[1]=(c1&gt;&gt;1)&amp;1;col1[2]=c1&amp;1; <br><br>        for(int i=0;i&lt;240;i++) { <br>            for(int j=0;j&lt;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&lt;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&lt;240;i++) { <br>          for(int j=0;j&lt;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&lt;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 &lt; 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 &lt; 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 + -
显示快捷键?