主题:请问什么是调色板?如何使用调色板?
阿Ben
[专家分:2200] 发布于 2005-10-03 22:40:00
我在[url=http://www.programfan.com/club/bbs.asp?bbsid=12]QBasic讨论区[/url]看到了一个实现淡入淡出效果的程序。我想,QBasic 能做的,Turbo Pascal 也能做!
听说淡入淡出效果是用调色板来实现的,我记得Turbo Pascal也能设置调色板,但由于小弟才疏学浅,不知道Turbo Pascal 的调色板怎么用,又对QBasic一窍不通。所以劳烦名位大虾,在此教教小弟,小弟将感激不尽!!
(注:最好教我使用作图模式的调色板,如果可以的话,做个淡入淡出效果演示程序出来吧)
相关链接:[url]http://www.programfan.com/club/showbbs.asp?id=47407[/url]
回复列表 (共23个回复)
沙发
林记 [专家分:1680] 发布于 2005-10-03 23:28:00
SetRGBPalette(颜色索引(0~15),Red,Green,Blue(0~255));
板凳
绿步甲 [专家分:1610] 发布于 2005-10-04 19:20:00
林记好强,什么都知道,在下佩服!
那个过程能否说得详细些,我不知怎么用!最好有个例子~~
3 楼
林记 [专家分:1680] 发布于 2005-10-04 22:46:00
例如把屏幕瞬间变黑
for i:=0 to 15 do
SetRGBPalette(i,0,0,0);{就是把0~15号色都变成黑色,最好在此前保存调色版的值,以后好恢复}
不过经过实验,发现只对6号以下颜色起作用,不知道为什么
可以试试
SetPalette(颜色索引(0~15),-127~128号色)
这个通用一点
4 楼
阿Ben [专家分:2200] 发布于 2005-10-05 00:26:00
首先多谢林记!
经我实验,又发现SetRGBPalette有这样的限制:
0<=Red,Green,Blue<=63
5 楼
阿Ben [专家分:2200] 发布于 2005-10-05 00:29:00
我做的淡入淡出程序:
uses Crt, Graph;
var
GraphDriver, GraphMode: Integer;
Color: Word;
Palette: PaletteType;
i:integer;
begin
GraphDriver := Detect;
InitGraph(GraphDriver, GraphMode, '..\BGI');
if GraphResult <> grOk then
Halt(1);
GetPalette(Palette);
setrgbpalette(1,0,0,0);
setcolor(1);
settextstyle(0,0,3);
outtextxy(100,300,'Good Morning!!');
readln;
for i:=0 to 63 do begin
setrgbpalette(1,0,i,0);
delay(20);
end;
readln;
for i:=63 downto 0 do begin
setrgbpalette(1,0,i,0);
delay(20);
end;
Readln;
CloseGraph;
end.
6 楼
阿Ben [专家分:2200] 发布于 2005-10-05 00:30:00
然后 lzl1403 作了改进:
uses Crt, Graph;
const
wide=5;
fast=2;
style=3;
var
GraphDriver, GraphMode: Integer;
Color: Word;
Palette: PaletteType;
i,j:integer;
begin
GraphDriver := Detect;
InitGraph(GraphDriver, GraphMode, '..\BGI');
if GraphResult <> grOk then
Halt(1);
GetPalette(Palette);
setrgbpalette(1,0,0,0);
setcolor(1);
settextstyle(0,0,3);
outtextxy(100,300,'Good Morning!');
readln;
for i:=0 to 63 do begin
setrgbpalette(1,63-i,0,i);
delay(20);
end;
readln;
for i:=63 downto 0 do begin
setrgbpalette(1,63-i,0,i);
delay(20);
end;
{===================================================}
readln;
for i:=1 to 5 do
begin
setrgbpalette(i,(i-1)*10,0,0);
end;
for i:=0 to getmaxx do
if i mod fast=0 then
begin
for j:=0 to 4 do
begin
setfillstyle(style,j+1);
bar(i+j*wide,0,i+j*wide+wide-1,getmaxy);
bar(i+(9-j)*wide,0,i+(10-j)*wide-1,getmaxy);
end;
setfillstyle(1,0);
bar(i,0,i+fast-1,getmaxy);
end;
CloseGraph;
end.
7 楼
jtchang [专家分:5370] 发布于 2005-10-05 14:37:00
呵呵~~显示图片效果,可以有好多种。淡入淡出只是其中之一。你也可以自己想几种编出来。
以前我编了个屏幕保护程序。指定目录放一些图片(bmp、jpg格式),然后就随机显示那些图片啦!有兴趣可以看看。
http://jtchang.ys168.com
里头的Photoslide.zip文件。
Photoslide.ini用记事本打开,可以改两个参数:一个是图片停留时间,另一个是图片存放的目录。缺省时图片是放在目录C:\800
你可以选一些图片先放好,然后运行试试。
那个是用delpi编的。我TP7编过的是花式清屏,道理差不多。(^_^)
8 楼
阿Ben [专家分:2200] 发布于 2005-10-05 18:44:00
jtchang:
能不能说说SetPalette和SetRGBPalette具体怎么用?现在我只对后者略懂一点皮毛。
我发这个帖的目的就是为了弄清这个。
9 楼
绿步甲 [专家分:1610] 发布于 2005-10-05 20:46:00
厉害!
有几个问题不明白:
PaletteType是什么意思,什么东东?
Halt(1);又是什么?
getmaxy又是什么?
10 楼
林记 [专家分:1680] 发布于 2005-10-05 21:17:00
Palette是用来保存调色版的
Halt(1)表示异常退出
Getmaxxy是用来取屏幕大小的
我来回复