主  页实用文档个人简历论文中心演讲稿自考成考社会学法律常识职场技巧公务员考试法律文书
 
设为首页
加入收藏
联系我们
 
 您的位置:首页 > 论文中心 > 计算机类 > 计算机理论 >
栏目导栏
   

    电子商务

    计算机应用

    计算机理论

    计算机网络

资料搜索
热门文章
·预备党员思想汇报范文
·入党自传
·表扬信
·安全生产论文
·怎样写检查
·教育心理学论文
·入党申请书 入党思想汇报
·思想道德修养论文
·应届毕业生简历模板
·社会实践调查报告2
·2006暑期会计实习日记范
·《教育心理学》试题库
·学生入党思想汇报范文
·中国农村医疗保险制度的
·论如何构建和谐大学校园
最新文章
·制作个人简历九大禁忌
·履历的包装
·怎样的简历是比较实用?
·入团申请书例文(6)
·入团申请书范文(1)
·入团申请书范文(2)
·履历表的撰写技巧
·履历说谎话
·入团申请书范文(3)
·入团申请书范文(4)
·简历制作的七个要点
·写简历别犯四个错
·入团申请书范文(5)
·入团申请书模板(初中生)
·个人学习总结
相关文章
无相关信息

VGA色彩编辑技术

[ 作者:收录网络  加入时间:2006-11-10 18:48:12被读次  来自:Leesuki ]
 

RGB色彩混合模型应用在VGA上可呈现64个辉度级,通过64种不同亮度的红色、绿色和蓝色叠加可产生出262144(64×64×64)种不同的色彩。在VGA的640×480×16模式下,因受到显示存储区的限制,VGA每次仅能从262144种颜色中选出16种颜色同时使用。虽然可以通过对VGA色彩控制寄存器DAC的操作选取所需要的色彩,在262144种颜色中进行16种色彩交换,用理想的色调绘制较高质量的图形图像,获得如模拟光照,色彩的自然过度等特殊效果,但由于没有现成的VGA色彩混合模型调色工具,因此对一般的用户来说色彩的调配是很不方便的,用户实际用到多数是VGA提供的16种缺省值色彩。本文给出了一个VGA色彩调配工具程序,使用本色彩调配工具提供的颜色编辑功能,可以方便的调试出所有的VGA模拟色彩。
色彩调配工具提供了下述四方面功能。
(1)颜色索引功能 本功能从色彩调配工具提供的调色板的16种颜色中每次选出一种颜色供用户调配,同时提示出当前被调配色彩中的RGB各分量值(辉度),RGB取值范围是0到63。使用‘i’和‘s’键改变颜色索引号号,通过颜色索引号在调色板上选取各种需调配的颜色。
(2)颜色调配功能 本功能在颜色选好后,对指定色号的颜色进行调配。使用‘1’和‘2’键增加和减少该颜色的红色分量。使用‘3’和‘4’键增加和减少绿色分量,使用‘5’和‘6’键增加和减少蓝色分量。在RGB分量值变化时,调配的颜色跟随着变化,且RGB各分量值也显示出来。调配中的颜色同时自动写入用户调色板。
(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 sx, sy, wsx, wsy, sx1, sy1, sx2, sy2, x1, y1, x2, y2, t1;
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,
42,21,0,42,42,42,21,21,21,21,21,63,0,63,0,
0,63,63,63,21,17,63,19,63,63,63,0,63,63,63};
int vga-gray[16][3]={
0,0,0,10,10,10,13,13,13,15,15,15,17,17,17,20,20,20,
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,
42,21,0,42,42,42,21,21,21,21,21,63,0,63,0,
0,63,63,63,21,17,63,19,63,63,63,0,63,63,63};
char string[]="0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15";
char title[]="VGA color pattern";
union REGS regs;
main(){
detectgraph(&adapter,&mode);
initgraph(&adapter, &mode,“ ”);
setfillstyle(SOLID-FILL,0); bar(118,100,507,239);
setfillstyle(SOLID-FILL,7); bar(120,103,509,237);
setcolor(0), rectangle(122,105,507,235);
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);
sx1=sx-4,sy1=sy-4,sx2=sx+(16*(wsx+1))+4;sy2=
sy+wsy+4;
rectangle(sx1,sy1,sx2,sy2);
for(t1=0;t1<16;t1++) {
x1=sx,y1=sy,x2=wsx,y2=wsy;
setfillstyle(SOLID-FILL,t1);
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);
rectangle(sx-1,sy-1,sx2-3,sy2-3);
sx=285,sy=40,wsx=80,wsy=20;
x1=sx,y1=sy,x2=wsx,y2=wsy;
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>15) clr-idx=0;
if(clr-idx<0) clr-idx=15;
change-idx();break;
case 's':clr-idx--;
if(clr-idx>15) 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>63) 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>63) 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>63) 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 14: clr=62;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,®s,®s);
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];
blu-vol=vga-default[t1][2];
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];
blu-vol=vga-gray[t1][2];
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];
blu-vol=vga-user[t1][2];
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:”);
for(t1=0;t1<16;t1++) printf(“%2d,”,t1);
set-cursor(row+2,col);
printf(“Red: ”);
for(t1=0;t1<16;t1++) printf(“%2d,”,vga-user[t1][0]);
set-cursor(row+3,col);
printf(“Green:”);
for(t1=0;t1<16;t1++) printf(“%2d,”,vga-user[t1][1]);
set-cursor(row+4,col);
printf(“Blue:”);
for(t1=0;t1<16;t1++) printf(“%2d,”,vga-user[t1][2]);
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);
bar(x1,y1,x1+x2,y1+y2);
return:}
set-cursor(x,y){
regs.h.ah=0x02,regs.h.bh=0;
regs.h.dh=x,regs.h.dl=y;
int86(0x10,®s,®s);
return;}

 

作者:陈永平

评论】【加入收藏夹】【 】【打印】【关闭