Показать сообщение отдельно
  #1  
Старый 26.01.2013, 20:19
zibert zibert вне форума
Прохожий
 
Регистрация: 28.08.2012
Адрес: NikolayevCity
Сообщения: 40
Версия Delphi: Семерка))
Репутация: 10
Лампочка Запись\чтение Битмапа

Здравствуйте форумчане! Есть небольшой но очень интересный вопрос:
Можно ли записать в файл действительные числа (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;
__________________
Если новая программа с первого раза компилируется без ошибок, значит, она написана принципиально неправильно.