お知らせ

電子会議

ライブラリ

パレット

Delphi FAQ検索

Delphi FAQ一覧

サンプル蔵





FDelphi FAQ
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