|
16番会議室「玉石混淆みんなで作るSample蔵」に寄せられたサンプル
"FileSteramでのTBitmapのハンドリング"
TFileStreamに複数のBitmapを格納し順次読み込む例です。
位置を別途覚えておいて、移動しながら読み込めばランダムに読み込むことも
可能だと思います。
高速なアニメーション等に使えるのではないでしょうか
以下の例ですと5000枚(ファイルサイズ50M)を表示しきるのに20秒でした。
(normal Pentium200)
//Filestreamに書き出す(Bitmapを一つのファイルにまとめる)
procedure TForm1.Button1Click(Sender: TObject);
var
currBmp:TBitmap;
fs:TFilestream;
i:integer;
begin
//誤動作防止
button1.enabled:=false;
button2.enabled:=false;
//ファイル名は任意
fs:=TFilestream.Create('d:\fs.dat',fmCreate);
fs.Position:=0;
currBmp:=TBitmap.Create;
try
with currBmp do begin
PixelFormat:=pf8bit;
width:=100;
height:=100;//サイズなどはバラバラでもOK
Canvas.Font.Size:=40;
//既存のファイルを読み込んでも無論OK
//既存のファイルがなかったので作っているだけ、、
for i:= 0 to 500 do
begin
Canvas.Brush.color:=i-Trunc(i/256)*256;
Canvas.Font.color:=255-Canvas.Brush.color;
Canvas.FillRect(rect(0,0,width,height));
Canvas.TextOut(10,10,inttostr(i));
saveToStream(fs);
end;
end;
finally
fs.free;
currBmp.free;
end;
button1.Enabled:=True;
button2.Enabled:=True;
end;
//Filestreamから順次読みこんで表示
procedure TForm1.Button2Click(Sender: TObject);
var
currBmp:TBitmap;
fs:TFilestream;
i:integer;
theRect:TRect;
begin
button1.enabled:=false;
button2.enabled:=false;
theRect:=Rect(0,0,99,99);
fs:=TFilestream.Create('d:\fs.dat',fmOpenRead);
fs.Position:=0;
currBmp:=TBitmap.Create;
try
for i:=0 to 500 do
begin
currBmp.LoadFromStream(fs);
//どっちが早いんだろう、、(^^;
Canvas.CopyRect(theRect,currBmp.canvas,theRect);
//Canvas.Draw(0,0,currBmp);
application.ProcessMessages;
//sleep(100); 必要に応じて
end;
finally
fs.free;
currBmp.free;
end;
button1.Enabled:=True;
button2.Enabled:=True;
end;
☆☆☆ サンプル蔵ブラウザUp!see nifty:FDELPHI/LIB/5/116 ☆☆☆
98/05/17(日) 10:11 凛(MXB01744)
Original document by 凛 氏 ID:(MXB01744)
ここにあるドキュメントは NIFTY SERVEの Delphi Users' Forum の16番会議室「玉石混淆みんなで作るSample蔵」に投稿されたサンプルです。これらのサンプルはボーランド株式会社がサポートする公式のものではありません。また、必ずしも動作が検証されているものではありません。これらのサンプルを使用したことに起因するいかなる損害も投稿者、およびフォーラムスタッフはその責めを負いません。使用者のリスクの範疇でご使用下さい。
Copyright 1996-2002 Delphi Users' Forum
|