お知らせ

電子会議

ライブラリ

パレット

Delphi FAQ検索

Delphi FAQ一覧

サンプル蔵





FDelphi FAQ
16番会議室「玉石混淆みんなで作るSample蔵」に寄せられたサンプル

"Streamに複数のbmpを入れランダムアクセス"



一つのファイルにbitmapと、bitmapのサイズの情報を複数格納しランダムにアク
セス可能にする例。
フォームにTSpinEditとボタンを二つ配置して、、、

{FileStreamを使ってBitmapのサイズとBitmapをファイルに書き出す}
procedure TForm1.Button1Click(Sender: TObject);
var
   fs:TFileStream;
   ms:TMemoryStream;
   size,i:integer;
   files:array[0..3] of string;
begin
   //例としてDelphi付属のimageを使ってみました
   files[0]:='C:\SPLASH\256COLOR\CHEMICAL.BMP';
   files[1]:='C:\SPLASH\256COLOR\FACTORY.BMP';
   files[2]:='C:\SPLASH\256COLOR\FINANCE.BMP';
   files[3]:='C:\SPLASH\256COLOR\HANDSHAK.BMP';

   fs:=TFileStream.create('c:\poo',fmCreate);
   ms:=TMemoryStream.create;//これにbitmapファイルを読み込む
   fs.position:=0;          //無くてもOKかも、、おまじない
   for i:=0 to 3 do         //今回は例なので固定数で、、
   begin
      ms.LoadFromFile(files[i]);
      size:=ms.Size;
      fs.Write(size,sizeOf(size));
      ms.SaveToStream(fs);
   end;
   fs.free;
   ms.free;
end;

procedure TForm1.Button2Click(Sender: TObject);
var
   fs:TFileStream;
   bmp:TBitmap;
   size,i:integer;
   index:integer;
begin
   size:=0;
   fs:=TFileStream.create('c:\poo',fmOpenRead);
   fs.position:=0;
   index:=SpinEdit1.Value;
   if index>3 then index:=3;//実際には妥当な処理を、、
   if index<0 then index:=0;//実際には妥当な処理を、、
   
   //指定されたbitmapまですっ飛ばす
   for i:=0 to index do
   begin
      fs.Position:=fs.position+size;
      fs.Read(size,sizeOf(size));
   end;

   //指定したところまで移動したので読み込む
   bmp:=TBitmap.create;
   bmp.LoadFromStream(fs);
   //フォームのキャンバスに描いてみました
   canvas.Draw(0,0,bmp);
   fs.free;
   bmp.free;
end;

                                 98/10/02(金) 01:15 凛(MXB01744)

Original document by 凛              氏 ID:(MXB01744)


ここにあるドキュメントは NIFTY SERVEの Delphi Users' Forum の16番会議室「玉石混淆みんなで作るSample蔵」に投稿されたサンプルです。これらのサンプルはボーランド株式会社がサポートする公式のものではありません。また、必ずしも動作が検証されているものではありません。これらのサンプルを使用したことに起因するいかなる損害も投稿者、およびフォーラムスタッフはその責めを負いません。使用者のリスクの範疇でご使用下さい。

Copyright 1996-2002 Delphi Users' Forum