|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Запись\чтение Битмапа
Здравствуйте форумчане! Есть небольшой но очень интересный вопрос:
Можно ли записать в файл действительные числа (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; Код:
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; Если новая программа с первого раза компилируется без ошибок, значит, она написана принципиально неправильно. |
#2
|
||||
|
||||
real 8 байт занимает.
И при чем тут битмап, битмап же 24-х битные целые числа используются? — Как тебя понимать? — Понимать меня не обязательно. Обязательно меня любить и кормить вовремя. На Delphi, увы, больше не программирую. Рекомендуемая литература по программированию |
Этот пользователь сказал Спасибо M.A.D.M.A.N. за это полезное сообщение: | ||
zibert (26.01.2013)
|
#3
|
|||
|
|||
Цитата:
Если новая программа с первого раза компилируется без ошибок, значит, она написана принципиально неправильно. |
#4
|
|||
|
|||
Тема закрыта..
Тема закрыта.. Проблему решил.. M.A.D.M.A.N. особое спасибо.. натолкнул на идею)).
Если новая программа с первого раза компилируется без ошибок, значит, она написана принципиально неправильно. |