关于显隐图片(100分)

  • 主题发起人 主题发起人 3p
  • 开始时间 开始时间
3

3p

Unregistered / Unconfirmed
GUEST, unregistred user!
如何让实现
1. 一图片微粒般碎化显示/消退的效果(不是一块一块),请各高手提示!
2. 图片的渐显/渐退



 
这需要使用TCanvas自己编程实现. 在Windows中, 对应于每一个象素点的值,
你可以使用RGB进行修改.

对于第二个问题, 你可以通过改变应用程序的私有调色板实现.
 
第二个问题可以用修改调色板的方法实现.
任何一本早期有关windows编程的书里都有.
 
关于显隐图片, 试试下面的代码:

unit Bmp?-Disaper;?
interface?
uses?
SysUtils,WinTypes,WinProcs,Messages,Classes,Graphics,Controls,Forms,Dialogs,Ex
tCtrls,StdCtrls;?
type?
TForm1=class(TForm)?
Image1:TImage;{显示渐隐图像}?
Timer1:TTimer;{时钟构件}?
Panel1:TPanel;{显示渐隐过程,已渐隐为背景色的颜色数}?
Button1:TButton;{开始渐隐按钮}?
procedure Timer1 Timer(Sender:TObject);{始终控制过程}?
procedure Button1 Click (Sender:TObject);{激发渐隐过程}?
procedure FormCreate (Sender:TObject);{窗体构造过程}?
private?
PalDevice:Imteger;{调色板模式标志}?
go:integer;{渐隐开始标志}?
pal:arrar[0...255] of TPaletteEntry;{逻辑调色板}?
end;??
var?
Form1:TForm1;

implementation?
{$R *.DFM}??
procedure TForm1.Timer1Timer(Sender:TObject);?
var?
i,n:integer;?
begin?
if go=1 then{开始渐隐}?
begin?
for i:=0 to 255 do{调色板颜色值递减}?
begin?

pal[i].peFlags:=PC?-RESERVED;{调色板动画标志,一定得这样设置}?
if pal[i].peRed>0 thenpal[i].peRed:=pal[i].peRed-1;?
if pal[i].peGreen>0 thenpal[i].peGreen:=pal[i].peGreen-1;?
if pal[i].peBlue>0 thenpal[i].peBlue:=pal[i].peBlue-1;〖ZK)〗?
end;??
SetPaletteEntries(Image1.Picture.Bitmap.Palette,0,256,pal);{设置新的颜色

DIB调色板}?
RealizePalette(Image1.Picture.Bitmap.Canvas.Handle);{影射逻辑调色板
到系统硬件调色板}?
{计算已经渐隐消失的颜色数,如全数完成则终止渐隐过程,令go=0}?
n:=0;?
for i:=0 to 255 do?
if(pal[i].peRed=0) and (pal[i].peGreen=0) and (pal[i].peBlue=0)
then?
n:=n+1?
if n=256 then?
begin?
Panel1.Caption:='OK';?
go:=0;?
end?
else?
Panel1.Caption:='n='+IntToStr(n);?
end;?
end;??
procedure TForm1.Button1Click(Sender:TObject);?
begin?
GetPaletteEntries(Image1.Pictrue.Bitmap.Palette,0,256,pal);{获得DIB图

的调色板}?
{判断系统是否是基于调色板的显示模式,如果是则开始渐隐过程}?
PalDevice:=GetDeviceCaps(Canvas.Handle,RASTERCAPS) and RC?-PALETTE;?
if(PalDevice>0) the go:=1;?
end;?
procedure TForm1.FormCreate(Sender:TObject);?
begin?
Image1.Pictrue.Bitmap.LoadFromFile('c:\video10\ts.bmp');{加载DIB图像}?
end;?
end.
 
如果是编译时确定的序列,应该用视频编辑工具
生成,在运行时播放就可以了。如果必须在运行
时动态运算,是比较麻烦的,否则那么多视频编
辑软件卖给谁?
微粒状消隐、显示应该用均匀分布的随机函数生
成每次更改象素的坐标,然后将其显示为背景/
前景。其中对随机函数和坐标的不同处理可以产
生很多不同的效果。如果用DDraw的Alpha通道来
实现,效果会更好,效率也更高。
淡入/淡出的效果最好用DDraw的Alpha通道来实
现,改调色板的方法仅对256色以下的图象有用。
 
感谢各位:
我对"DDraw的Alpha通道"不了解,能否具体一点?谢谢!
 
在控件库中的 FxImage1.zip 有很多图像的特效功能, 看看是否由你所要的吧
 
"DDraw的Alpha通道":
一般的真彩色图象使用3个颜色通道:R,G和B.但是,如果要使
真彩色图象具有透明效果,可以增加一个表示透明程度的通道.
DDraw就支持这种通道.生成一个DDraw的具有Alpha通道的
Surface(大小为待显示图象的大小),然后将图象加载于其中,
先设置所有Alpha通道的值为0,用BitBlt将该Surface画到
主Surface,就是正常显示的图象,没有透明效果.加大Alpha
的值再画上去,图象就具有了透明效果.逐渐加大Alpha的值
然后重绘,就是淡出.其它效果也可以这样做出来.
 
thank everyone,
lhz,请举个具体的例子。
huizhang,请给我这个控件。
 
<a href="mailto:dark_rose@371.net">我也要!</a>
 
<a href="/delphi/downloads/fximg11.zip">fxImg11.zip</a>在控件库中
 
这是什么连接?
 
控件库好象不行了
帮忙发一份吧
 
yysun怎么搞的, 控件库好使呀, 只是这个fxImg11.zip找不到了.

发送给3P, 茶蛋
 
怎么这个down不下来??


 
怎么这个down不下来??


 
lzx,再说仔细点吧.
 
Jimchael Tsee贴的程序我再哪里见过,而且调试过,
效果不好,要求显示模式不能超过256色,那还有趣吗:)
 
3p:

这个问题已经很长时间没有人参加讨论,为保持版面
整洁,节约网友时间,请提问者采取必要处理措施。
关于图形图象版管理细则,请参见<a href="http://www.gislab.ecnu.edu.cn/delphibbs/DispQ.asp?LID=111927">这个</a>问题。如两天
内提问者没有响应,我将采取强制措施。

如有管理建议,请到<a href="http://www.gislab.ecnu.edu.cn/delphibbs/DispQ.asp?LID=111927">这里</a>提出。谢谢!
 

Similar threads

D
回复
0
查看
754
DelphiTeacher的专栏
D
D
回复
0
查看
728
DelphiTeacher的专栏
D
D
回复
0
查看
683
DelphiTeacher的专栏
D
D
回复
0
查看
553
DelphiTeacher的专栏
D
D
回复
0
查看
2K
DelphiTeacher的专栏
D
后退
顶部