回 帖 发 新 帖 刷新版面

主题:请问什么是调色板?如何使用调色板?

我在[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个回复)

沙发

SetRGBPalette(颜色索引(0~15),Red,Green,Blue(0~255));

板凳

林记好强,什么都知道,在下佩服!
那个过程能否说得详细些,我不知怎么用!最好有个例子~~

3 楼

例如把屏幕瞬间变黑

for i:=0 to 15 do
SetRGBPalette(i,0,0,0);{就是把0~15号色都变成黑色,最好在此前保存调色版的值,以后好恢复}

不过经过实验,发现只对6号以下颜色起作用,不知道为什么
可以试试

SetPalette(颜色索引(0~15),-127~128号色)

这个通用一点

4 楼

首先多谢林记!
经我实验,又发现SetRGBPalette有这样的限制:
0<=Red,Green,Blue<=63

5 楼

我做的淡入淡出程序:

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 楼

然后 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 楼

呵呵~~显示图片效果,可以有好多种。淡入淡出只是其中之一。你也可以自己想几种编出来。
以前我编了个屏幕保护程序。指定目录放一些图片(bmp、jpg格式),然后就随机显示那些图片啦!有兴趣可以看看。
http://jtchang.ys168.com
里头的Photoslide.zip文件。
Photoslide.ini用记事本打开,可以改两个参数:一个是图片停留时间,另一个是图片存放的目录。缺省时图片是放在目录C:\800
你可以选一些图片先放好,然后运行试试。
那个是用delpi编的。我TP7编过的是花式清屏,道理差不多。(^_^)

8 楼

jtchang:
能不能说说SetPalette和SetRGBPalette具体怎么用?现在我只对后者略懂一点皮毛。
我发这个帖的目的就是为了弄清这个。

9 楼

厉害!
有几个问题不明白:
PaletteType是什么意思,什么东东?
Halt(1);又是什么?
getmaxy又是什么?

10 楼

Palette是用来保存调色版的
Halt(1)表示异常退出
Getmaxxy是用来取屏幕大小的

我来回复

您尚未登录,请登录后再回复。点此登录或注册