お知らせ

電子会議

ライブラリ

パレット

Delphi FAQ検索

Delphi FAQ一覧

サンプル蔵





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

"RE:Bitmap結合+コメント付け TStream使用"

この発言は
#00452 凛 さんのBitmap結合+コメント付け TStream使用
に対するコメントです

凛 さん、こんにちは。 >TFileStreamとTMemoryStreamを使い複数(この場合2つ)Bitmapファイルを >結合し、コメントを付加した、独自ファイルを作る/読む方法の例です。 ちょっと改造させて頂きました。 (1)数百個単位で結合する場合にも対応、同時に開くストリーム数は2個 (2)ファイル名は最初に配列に格納されているものとする 要するに本格的なゲーム用にも使えるように(^^;) type TMixDataHeader = Record datasize : array[0..999] of integer; //ファイルのサイズ dataheadder : array[0..999] of integer; //ファイルの先頭位置 //あとはファイルの名前とか属性とか適当に入れるつもり end; //ファイルを結合する procedure TForm1.Button1Click(Sender: TObject); var fs,dat1:TFileStream; theHeader:TMixDataHeader; filenames : array[0..5] of string; i,imax: integer; begin //どこかからファイルリストは持ってくる感じで filenames[0] := 'c:\1.bmp'; filenames[1] := 'c:\2.bmp'; filenames[2] := 'c:\3.bmp'; filenames[3] := 'c:\1.wav'; filenames[4] := 'c:\4.bmp'; imax := 4; //本当はちゃんとやりましょう for i := 0 to imax do begin; dat1 :=TFilestream.Create(filenames[i],fmOpenRead); theHeader.datasize[i] := dat1.size; dat1.free end; theHeader.dataheadder[0]:= sizeof(theHeader); for i := 1 to imax do begin; theHeader.dataheadder[i] := theHeader.dataheadder[i-1]+theHeader.datasize[i-1]; end; fs:=TFileStream.create('c:\0.dat',fmCreate); fs.position:=0; fs.Write(theHeader,sizeOf(theHeader)); for i := 0 to imax do begin; dat1 :=TFilestream.Create(filenames[i],fmOpenRead); dat1.position:=0; fs.copyfrom(dat1,dat1.size); dat1.free; end; fs.free; end; //ビットマップの場合の、取り出しと表示 procedure TForm1.Button2Click(Sender: TObject); var dat1:TMemoryStream; fs:TFileStream; theHeader:TMixDataHeader; bmp:TBitmap; i: integer; begin bmp:=TBitmap.create; dat1:=TMemoryStream.Create; i := 2; //適当です fs:=TFileStream.create('c:\0.dat',fmOpenRead); fs.position:=0; fs.Read(theheader,sizeOf(theHeader)); fs.position := theHeader.dataheadder[i]; dat1.CopyFrom(fs,theHeader.datasize[i]); dat1.position:=0; bmp.LoadFromStream(dat1); image1.Picture.assign(bmp); fs.free; dat1.free; bmp.free; end; //サウンドの場合の取り出しと演奏 procedure TForm1.Button3Click(Sender: TObject); var dat1:TMemoryStream; fs:TFileStream; theHeader:TMixDataHeader; i: integer; begin dat1:=TMemoryStream.Create; i := 3; //適当です fs:=TFileStream.create('c:\0.dat',fmOpenRead); fs.position:=0; fs.Read(theheader,sizeOf(theHeader)); fs.position := theHeader.dataheadder[i]; dat1.CopyFrom(fs,theHeader.datasize[i]); dat1.position:=0; dat1.SaveToFile('c:\temp.wav'); dat1.Free; fs.free; //DirectXなら TWave.LoadFromStream が使えるのですが。 With MediaPlayer1 do begin Filename := 'c:\temp.wav'; Open; Play; Close; end; end; PS. MindStormはほんと〜に面白いです。spirit.ocxをDelphiから使うサンプル 書いてみようかな(笑) http://member.nifty.ne.jp/toyozou 99/02/11(木) 00:29 とよぞう(PXW07530) Original document by とよぞう 氏 ID:(PXW07530)



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

Copyright 1996-2002 Delphi Users' Forum