查字典论文网 >> VGA色彩编辑技术

VGA色彩编辑技术

小编:

VGA色彩编辑技术 VGA色彩编辑技术 VGA色彩编辑技术 RGB色彩混合模型应用在VGA上可呈现64个辉度级,通过64种不同亮度的红色、绿色和蓝色叠加可产生出262144(64×64×

6

4)种不同的色彩。在VGA的640×480×16模式下,因受到显示存储区的限制,VGA每次仅能从262144种颜色中选出16种颜色同时使用。虽然可以通过对VGA色彩控制寄存器DAC的操作选取所需要的色彩,在262144种颜色中进行16种色彩交换,用理想的色调绘制较高质量的图形图像,获得如模拟光照,色彩的自然过度等特殊效果,但由于没有现成的VGA色彩混合模型调色工具,因此对一般的用户来说色彩的调配是很不方便的,用户实际用到多数是VGA提供的16种缺省值色彩。本文给出了一个VGA色彩调配工具程序,使用本色彩调配工具提供的颜色编辑功能,可以方便的调试出所有的VGA模拟色彩。

色彩调配工具提供了下述四方面功能。

(1)颜色索引功能 本功能从色彩调配工具提供的调色板的16种颜色中每次选出一种颜色供用户调配,同时提示出当前被调配色彩中的RGB各分量值(辉度),RGB取值范围是0到63。使用‘i’和‘s’键改变颜色索引号号,通过颜色索引号在调色板上选取各种需调配的颜色。

(3)显示调色板功能 本功能显示色彩调配工具提供的3个调色板。第一个是缺省值调色板,显示16种标准颜色,使用‘d’键弹出。第二个是灰色调色板,显示16种灰度的灰色,使用‘g’键弹出。第三个是用户调色板,它的初始值是16种标准颜色,用户使用颜色索引功能和颜色调配功能在它上面进行色彩编辑,编辑好的颜色的RGB值自动保存起来。使用‘u’键将用户调色板弹出。

(4)调色板打印功能 本功能将用户编辑好的用户调色板中的16种颜色的RGB值打印在屏幕上,供用户记录下来后在自己的应用程序中使用。

色彩调配工具在Turbo C和Borland C下运行,读者可以单独使用它,也可以把它改成函数加在应用程序中。程序清单附后:

#include <dos.h>

#include <graphics.h>

int adapter, mode;

int screen-x,screen-y;int red-vol, grn-vol, blu-vol, key-num, idx-num, row, col;

int rgb-flag, adj, clr-idx;

int vga-default[16][3]={

0,0,0,0,0,42,0,42,0,0,42,42,42,0,0,42,0,42,0,63,63,63,21,17,63,19,63,63,63,0,63,63,63};

int vga-gray[16][3]={24,24,24,28,28,28,33,33,33,37,37,37,41,41,41,

46,46,46,50,50,50,54,54,54,58,58,58,63,63,63};

int vga-user[16][3]={

0,0,0,0,0,42,0,42,0,0,42,42,42,0,0,42,0,42,0,63,63,63,21,17,63,19,63,63,63,0,63,63,63};char title[]="VGA color pattern";

union REGS regs;

main(){

detectgraph(&adapter,&mode);

initgraph(&adapter, &mode,“ ”);setfillstyle(SOLID-FILL,

7); bar(120,103,509,2

3

7);sx=146,sy=138,wsx=20,wsy=80;

settextstyle(3,0,

1);

outtextxy(250,105,title);

settextstyle(2,0,

5);

outtextxy(sx,sy-15,string);sy+wsy+4;for(t1=0;t1<16;t1++) {setfillstyle(SOLID-FILL,t

1);

bar(sx,sy,sx+wsx,sy+wsy);

sx=sx+wsx+1;{

setcolor(0);

sx=146;idx-num=1;clr-idx=15;

rectangle(sx,sy,sx2-4,sy2-

4);sx=285,sy=40,wsx=80,wsy=20;setfillstyle(SOLID-FILL,clr-idx);

bar(sx,sy,sx+wsx,sy+wsy);

red-vol=63;grn-vol=63;blu-vol=63;

display-status();

clr-bar-loop:

key-num=getch();

if(key-num==‘0’) return;

switch(key-num){

case `i′:clr-idx++;

if(clr-idx>

1

5) clr-idx=0;

if(clr-idx<0) clr-idx=15;

change-idx();break;

case 's':clr-idx--;

if(clr-idx>

1

5) clr-idx=0;

if(clr-idx<0) clr-idx=15;

change-idx();break;

case '1':rgb-flag=1;adj=0;

change-rgb();break;

case '2':rgb-flag=1;adj=1;

change-rgb();break;

case '3':rgb-flag=2;adj=0;

change-rgb();break;

case '4':rgb-flag=2;adj=1;

change-rgb();break;

case '5':rgb-flag=3,adj=0;

change-rgb();break;

case '6':rgb-flag=3;adj=1;

change-rgb();break;

case 'd':reset-defaults();

idx-num=1;reset-pattern();break;

case 'g':reset-grays();

idx-num=2;reset-pattern();break;

case 'u':reset-user();

idx-num=3;reset-pattern();break;

case 'p':print-user();break;}

goto clr-bar-loop;}

display-status(){

setcolor

(7);

row=1;col=15;

set=cursor(row,col);

printf(“Index: %2d”, clr-idx);

set-cursor(row+1,col);

printf(“Red : %d”, red-vol);

set-cursor(row+2,col);

printf(“Green:%d”,grn-vol);

set-cursor(row+3,col);

printf(“Blue :%d”,blu-vol);

return;}

adjust-color(){

switch(rgb-flag){

case 1:

if(adj==0) red-vol++;

if(adj==

1) red-vol--;

if(red-vol>

6

3) red-vol=63;

if(red-vol<0) red-vol=0;

break;

case 2:

if(adj==0) grn-vol++;

if(adj==

1) grn-vol--;

if(grn-vol>

6

3) grn-vol=63;

if(grn-vol<0) grn-vol=0);

break;

case 3:

if(adj==0) blu-vol++;

if(adj==

1) blu-vol--;

if(blu-vol>

6

3) blu-vol=63;

if(blu-vol<0) blu-vol=0;

break;}

return;}

write-rgb(clr,red-vol,grn-vol,blu-vol){

switch(clr){

case 6: clr=20;break;

case 8: clr=20;break;

case 9: clr=57;break;

case 10: clr=58;break;

case 11: clr=59;break;

case 12: clr=60;break;

case 13: clr=61;break;case 15: clr=63;break;

default:break;}

regs.h.ah=0x10;

regs.h.al=0x10;

regs.x.bx=clr;

regs.h.ch=grn-vol;

regs.h.cl=blu-vol;

regs.h.dh=red-vol;

int86(0x10,&regs,&regs);

return;}

set-index(){

switch(idx-num){

case 1:red-vol=vga-default[clr-idx][0];

grn-vol=vga-default[clr-idx][1];

blu-vol=vga-default[clr-idx][2];break;

case 2:red-vol=vga-gray[clr-idx][0];

grn-vol=vga-gray[clr-idx][1];

blu-vol=vga-gray[clr-idx][2];break;

case 3:red-vol=vga-user[clr-idx][0];

grn-vol=vga-user[clr-idx][1];

blu-vol=vga-user[clr-idx][2];break;}

return;}

reset-defaults(){

for(t1=0; t1<16; t1++){

clr-idx=t1;

red-vol=vga-default[t1][0];

grn-vol=vga-default[t1][1];write-rgb(clr-idx,red-vol,grn-vol,blu-vol);}

t1=15; clr-idx=t1;

display-status();return;}

reset-grays(){

for(t1=0;t1<16;t1++){

clr-idx=t1;

red-vol=vga-gray[t1][0];

grn-vol=vga-gray[t1][1];write-rgb(clr-idx,red-vol,grn-vol,blu-vol);}

t1=15;clr-idx=t1;

display-status();return;}

reset-user(){

for(t1=0;t1<16;t1++){

clr-idx=t1;

red-vol=vga-user[t1][0];

grn-vol=vga-user[t1][1];write-rgb(clr-idx,red-vol,grn-vol,blu-vol);}

t1=15;clr-idx=t1;

display-status();return;}

store-user(){

vga-user[clr-idx][0]=red-vol;

vga-user[clr-idx][1]=grn-vol;

vga-user[clr-idx][2]=blu-vol;

return;}

print-user(){

row=16;col=15;

set-cursor(row,col);

printf(“RGB value:”);

set-cursor(row+1,col);

printf(“Index:”);set-cursor(row+2,col);

printf(“Red: ”);set-cursor(row+3,col);

printf(“Green:”);set-cursor(row+4,col);

printf(“Blue:”);return;}

change-idx(){

set-index();display-status();

setfillstyle(SOLID-FILL,clr-idx);

bar(sx,sy,sx+wsx,sy+wsy);

return;}

change-rgb(){

adjust-color();display-status();

write-rgb(clr-idx,red-vol,grn-vol,blu-vol);

store-user();

return;}

reset-pattern(){

display-status();

setfillstyle(SOLID-FILL,clr-idx);return:}

set-cursor(x,y){

regs.h.ah=0x02,regs.h.bh=0;

regs.h.dh=x,regs.h.dl=y;

int86(0x10,&regs,&regs);

return;}

上一篇:对劳动关系中损害赔偿案件的认定及处理(1)论文

下一篇:如何对幼儿进行德育教育论文 幼儿园关于德育教育之类的论文