procedure TForm1.Crypt;
var
ms : TMemoryStream;
c : array[1..2] of Char;
begin
ms := TMemoryStream.Create;
ms.LoadFromFile('aaa.bmp');
c := 'DA';
ms.Write(c,sizeof(c));
ms.SaveToFile('bbb.bom');
ms.Free;
end;
procedure TForm1.Load;
var
ms : TMemoryStream;
c : array[1..2] of Char;
begin
ms := TMemoryStream.Create;
ms.LoadFromFile('bbb.bom');
c := 'BM';
ms.Write(c,sizeof(c));
//Image1.Picture.Bitmap.LoadFromStream(ms); ←これがエラー吐く
ms.SaveToFile('ccc.bmp');
Image1.Picture.Bitmap.LoadFromFile('ccc.bmp');
DeleteFile('ccc.bmp');
ms.Free;
end;
現在ゲームを作っていて、ファイルを見られるのを防ぐために、
Cryptでビットマップファイルの先頭2バイトを弄り(BM→DA)、
Loadでそれを読み込もうとしているのですが・・・
読み込んでファイルの先頭を修正したあと、
TMemoryStreamから直接TBitmapに読み込ませるとエラーを吐きます。
しかし、SaveToFileでファイルを作るとWindowsではちゃんとビットマップとして読み込めるし
そのファイルをTBitmapで読み込むことができます。
一旦ファイルを作成せずに読み込ませる事はできないでしょうか?
読み込み後に
ms.position:=0 がネース。
なるほど。
ms.Write(c,sizeof(c));
のあとでms.positionが2になってしまうからエラー吐くのね。
monaaさんありがとうございました!