Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Графика и игры
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Закрытая тема
 
Опции темы Поиск в этой теме Опции просмотра
  #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;
__________________
Если новая программа с первого раза компилируется без ошибок, значит, она написана принципиально неправильно.
  #2  
Старый 26.01.2013, 20:21
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

real 8 байт занимает.
И при чем тут битмап, битмап же 24-х битные целые числа используются?
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Этот пользователь сказал Спасибо M.A.D.M.A.N. за это полезное сообщение:
zibert (26.01.2013)
  #3  
Старый 26.01.2013, 20:29
zibert zibert вне форума
Прохожий
 
Регистрация: 28.08.2012
Адрес: NikolayevCity
Сообщения: 40
Версия Delphi: Семерка))
Репутация: 10
По умолчанию

Цитата:
Сообщение от M.A.D.M.A.N.
real 8 байт занимает.
И при чем тут битмап, битмап же 24-х битные целые числа используются?
Спасибо за ответ.. но все таки дело в том что надо зашифровать файл используя код который генерирует случайную величину типа real ее нужно записать в файл.. но как это сделать не могу понять.. если бы она была в диапазоне 0-1 то можно было домножить на 16777216(макс количество цветов для бмп с глубиной 24бита) но числа превышают этот диапазон(но не намного на пару едениц).
__________________
Если новая программа с первого раза компилируется без ошибок, значит, она написана принципиально неправильно.
  #4  
Старый 27.01.2013, 01:41
zibert zibert вне форума
Прохожий
 
Регистрация: 28.08.2012
Адрес: NikolayevCity
Сообщения: 40
Версия Delphi: Семерка))
Репутация: 10
Смех Тема закрыта..

Тема закрыта.. Проблему решил.. M.A.D.M.A.N. особое спасибо.. натолкнул на идею)).
__________________
Если новая программа с первого раза компилируется без ошибок, значит, она написана принципиально неправильно.
Закрытая тема


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 10:16.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter