Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.05.2012, 22:33   #1
Christor
Пользователь
 
Регистрация: 11.05.2012
Сообщений: 15
Вопрос Сохранение изображения графического модуля в файл. ТПаскаль

Доброго времени суток.
Необходимо сохранить изображение графического модуля в файл для последующего чтения и востановления этого изображение. Я не уверен возможно ли это.
Код:
uses crt,graph;
Var f:file;
    size,gd,gm:integer;
    p,n:pointer;
begin
   gd:=detect;
   mark(n);
   initgraph(gd,gm,'C:\tp7\bgi');
   setcolor(15);
   rectangle(200,200,350,300);
   setfillstyle(1,4);
   floodfill(201,205,15);
   size:=imagesize(200,200,350,300);
   getmem(p,size);
   getimage(200,200,350,300,p^);
   assign(f,'ssa.hh');
   rewrite(f,size);
   write(f,p^);
   close(f);
   readln;
   release(n);
end.
Думаю, что из кода понятно, что я хочу сделать. Далее после записи хочу восстановить изображение таким образом:
Код:
reset(f);
readln(f,p^);
putimage(200,200,p^);
Но на строчке " write(f,p^);" ошибка "Error 63:Invalid file type". Возможно ли вообще реализовать то, что я хочу. Если да, то как? Это очень нужно! Заранее спасибо!
Christor вне форума Ответить с цитированием
Старый 12.05.2012, 22:36   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Правильно пишет. Для нетипированных файлов есть процедуры BlockWrite-BlockRead.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 13.05.2012, 00:37   #3
Christor
Пользователь
 
Регистрация: 11.05.2012
Сообщений: 15
По умолчанию

Спасибо!
Сделал так
Код:
uses crt,graph;
Var f:file;
    size,gd,gm:integer;
    p,n:pointer;
begin
   gd:=detect;
   mark(n);
   initgraph(gd,gm,'C:\tp7\bgi');
   setcolor(15);
   rectangle(200,200,350,300);
   setfillstyle(1,4);
   floodfill(201,205,15);
   size:=imagesize(200,200,350,300);
   getmem(p,size);
   getimage(200,200,350,300,p^);
   assign(f,'ssa.hh');
   rewrite(f);
   BlockWrite(f,p^,60);
   close(f);
   readln;
   release(n);
end.
Далее так:
Код:
uses crt,graph;
Var f:file;
    size,gd,gm:integer;
    p,n:pointer;
begin
   gd:=detect;
   mark(n);
   initgraph(gd,gm,'C:\tp7\bgi');
   size:=imagesize(200,200,350,300);
   getmem(p,size);
   assign(f,'ssa.hh');
   reset(f);
   Blockread(f,p^,60);
   close(f);
   putimage(200,200,p^,1);
   readln;
   release(n);
end.
Но... не могу понять смысл третьего параметра в blockwrite(read). Читал в интернете и книгах. Но понять не смог. Можете рабочим-крестьянским языком объяснить суть? Число 60 "взял с потолка". Буду очень благодарен.
Christor вне форума Ответить с цитированием
Старый 13.05.2012, 02:18   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
понять смысл третьего параметра в blockwrite
цитирую хелп TurboPascal
Цитата:
Код:
 BlockWrite (procedure)

Writes one or more records from a variable.

 Declaration:
 procedure BlockWrite(var f: File; var Buf; Count: Word [; var Result:
    Word]);
where:
   F        untyped file variable
   Buf      any variable
   Count    an expression of type Word
   Result   a variable of type Word
перевожу
первый параметр F - нетипизированная файловая переменная (файл, куда пишем данные)
второй параметр - Buf - любая переменная (которую записываем)
третий параметр - Count переменная типа Word - СКОЛЬКО байт записываем
четвёртый (необязательный параметр) - Result переменная типа Word - СКОЛЬКО байт реально записалось.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 13.05.2012, 11:18   #5
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

Скока памяти ухватили, стока и записали!
Код:
   Blockread(f, p^, size);
Только перед этим reset нужно записать так:
Код:
  reset(f, 1);
Иначе длина файла будет измеряться не в байтах а в 128-байтных секторах - тяжелое наследство ОС CP/M-80, для которой были выпущены первые 3 версии TP.

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
третий параметр - Count переменная типа Word - СКОЛЬКО байт записываем
Эта фраза неверная.
Нужно читать "сколько блоков записываем. По умолчанию длина блока равна 128 байтам, но ее величину можно изменить при помощи второго параметра в операторе reset".

Последний раз редактировалось Stilet; 13.05.2012 в 12:04.
s-andriano вне форума Ответить с цитированием
Старый 13.05.2012, 12:27   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от s-andriano Посмотреть сообщение
Цитата:
Сообщение от Serge_Bliznykov
третий параметр - Count переменная типа Word - СКОЛЬКО байт записываем
Эта фраза неверная.
Нужно читать "сколько блоков записываем. По умолчанию длина блока равна 128 байтам, но ее величину можно изменить при помощи второго параметра в операторе reset".
Полностью согласен!

Просто настолько привык в BlockRead/BlockWrite использовать типизированные файлы
Код:
  var  f : file of byte;
или
Код:
  var  f : file of char;
что совершенно забыл про эту фишку!!!


добавлю, что параметер, указывающий размер одного файлового блока в байтах нужно указывать не только для Reset, но и для Rewrite:
Код:
var f: file;
...
  Rewrite(f, 1); {размер одного блока файла равен 1 байт}

Последний раз редактировалось Serge_Bliznykov; 13.05.2012 в 12:33.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 13.05.2012, 15:43   #7
Christor
Пользователь
 
Регистрация: 11.05.2012
Сообщений: 15
По умолчанию

Ясно. Всем спасибо!
Christor вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сохранение изображения с вебки в файл. OmgA Мультимедиа в Delphi 2 19.01.2012 13:01
OpenGL, сохранение изображения в файл Syn-McJ C++ Builder 0 02.03.2011 19:47
Сохранение части изображения из TImage в файл *.bmp ImmortalAlexSan Общие вопросы Delphi 15 02.08.2010 13:00
Сохранение изображения TWinControl в файл Oburec Общие вопросы Delphi 0 09.05.2010 00:48
Сохранение заданий на печать в файл изображения JPG DimD Фриланс 1 15.04.2009 19:27