此问题,我已解决,将其贴在此,以供参考
var
FFileHeader : TBitmapFileHeader;
FInfoHeader : TBitmapInfoHeader;
FInfo : TBitmapInfo;
TempStream : TMemoryStream;
VPi_PieFile :file;
buf:array[1..10840] of byte;
VPi_CutNum:longint; //裁片数目
VPi_BmpByteNum,offset: longint; //bmp字节数
i:integer;
begin
assignfile(VPi_PieFile,'e:/work/filename.pie');
reset(VPi_PieFile,1);
seek(VPi_PieFile,20); //读取裁片数目
blockread(VPi_PieFile,VPi_CutNum,4);
seek(VPi_PieFile,24); //读取bmp字节数
blockread(VPi_PieFile,VPi_BmpByteNum,4);
i:=strtoint(edit1.text);
if i< VPi_CutNum+1 then
begin
//建立Bitmap 文件头
offset:=28+VPi_BmpByteNum*(i-1)+236*(i-1)+4*(i-1);
canvas.textout(0,20,'这是文件111.pie的第 '+inttostr(i)+' 个裁片数据');
with FFileHeader do
begin
bfType := $4D42;
bfSize := 10840; //大小固定
bfReserved1 := 0; //保留字
bfReserved2 := 0; //保留字
bfOffBits := SizeOf(TBitmapFileHeader)+SizeOf(TBitmapInfoHeader); //位图数据偏移量
end;
//建立Bitmap 位图数据头
with FInfoHeader do
begin
biSize := 40; //位图数据头的长度 固定的
//biSize := SizeOf(TBitmapInfoHeader); //位图数据头的长度
biWidth := 60; //图像宽
biHeight := 60; //图像高
biPlanes := 1; //输出设备的位平面数,必须为1
biBitCount := 24; //24位真彩色
biCompression := BI_RGB; //压缩类型 BI_RGB????
biSizeImage := 60* 60 * 3; //图像文件的字节数
end;
seek(VPi_PieFile,offset);
blockread(VPi_PieFile,buf,sizeof(buf));
TempStream := TMemoryStream.Create;
TempStream.Write(FFileHeader,sizeof(FFileHeader));
TempStream.seek(0,soFromEnd);
TempStream.Write(Buf,sizeof(buf));
TempStream.Position := 0;
TempStream.savetofile('e:/work/test'+inttostr(i)+'.bmp');
TempStream.Free;
end
else
begin
showmessage('i太大,重输入<'+inttostr(VPi_CutNum));
end;
closefile(VPi_PieFile);
end;
end.