Запись\чтение Битмапа
Здравствуйте форумчане! Есть небольшой но очень интересный вопрос:
Можно ли записать в файл действительные числа (real) с последующим их считыванием.. Желательно без сильных потерь. Надеюсь на вашу помощь..
PS
У меня есть тип BmpInfo:
Код:
type
TBmpInfo = record
Buf:packed array[1..2] of Char;
offset:Integer;
size:Integer;
bits:Word;
comp:Integer;
Width:Integer;
Heigth:Integer;
Gor:Integer;
Vert:Integer;
NumCol:Integer;
NumColM:Integer;
Colors: packed array [1..1000,1..1000] of Integer;
end;
Чтение произвожу с помощью Blockread:
Код:
AssignFile(bitmap, newfilename);
FileMode:=fmOpenRead;
Reset(bitmap,1);
BlockRead(bitmap,BmpInfo.Buf,2);
if BmpInfo.Buf<>'BM'then Application.Terminate;
BlockRead(bitmap,BmpInfo.size,4);
BlockRead(bitmap,BmpInfo.offset,4);
BlockRead(bitmap,BmpInfo.offset,4);
BlockRead(bitmap,BmpInfo.Width,4);
BlockRead(bitmap,BmpInfo.Width,4);
BlockRead(bitmap,BmpInfo.Heigth,4);
BlockRead(bitmap,BmpInfo.bits,2);
BlockRead(bitmap,BmpInfo.bits,2);
BlockRead(bitmap,BmpInfo.comp,4);
BlockRead(bitmap,BmpInfo.Gor,4);
BlockRead(bitmap,BmpInfo.Gor,4);
BlockRead(bitmap,BmpInfo.Vert,4);
BlockRead(bitmap,BmpInfo.NumCol,4);
BlockRead(bitmap,BmpInfo.NumColM,4);
Seek(bitmap,BmpInfo.offset);
for x:=1 to BmpInfo.Heigth do
begin
for y:= 1 to BmpInfo.Width do
begin
BlockRead(bitmap,buf2,3);
color:=RGB(buf2[3],buf2[2],buf2[1]);
BmpInfo.Colors[x,y]:= ColorToRGB(color);
end;
end;
Запись проводиться через FileStream:
Код:
rez:=0;
fs:= TFileStream.Create(filename, fmCreate);
fs.WriteBuffer(BmpInfo.Buf,2);
fs.WriteBuffer(BmpInfo.size,4);
fs.WriteBuffer(rez,2);
fs.WriteBuffer(rez,2);
fs.WriteBuffer(BmpInfo.offset,4);
rez:=40;
fs.WriteBuffer(rez,4);
fs.WriteBuffer(BmpInfo.Width,4);
fs.WriteBuffer(BmpInfo.Heigth,4);
rez:=1;
fs.WriteBuffer(rez,2);
fs.WriteBuffer(BmpInfo.bits,2);
fs.WriteBuffer(BmpInfo.comp,4);
rez:=0;
fs.WriteBuffer(rez,4);
fs.WriteBuffer(BmpInfo.gor,4);
fs.WriteBuffer(BmpInfo.vert,4);
fs.WriteBuffer(BmpInfo.numcol,4);
fs.WriteBuffer(BmpInfo.numcolm,4);
i:=0;
for x:=1 to BmpInfo.Heigth do
begin
for y:= 1 to BmpInfo.Width do
begin
Inc(i);
fs.WriteBuffer(z[i],3);
end;
end;
fs.Free;
__________________
Если новая программа с первого раза компилируется без ошибок, значит, она написана принципиально неправильно.
|