Помощь - Поиск - Пользователи - Календарь
Полная версия: Работа с файлами
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
BRS
Необходимо сохранить в файл прямоугольную картинку (вроде того как через GetImage) в любом расширении, для последующего вывода ее на экран.

Какь? а то с файлами вобще плохо себе представляю как работать
Altair
теоретически, хоть в текстовый smile.gif
а реально, надо так:
заволим запись:
dd =record
color:byte;
x,y:word;
end;
теперь файл такого вида:
f: file of dd;

теперь каждый пиксель участка сичтываем цвет, и сохраняем координаты.
Записываем в файл. Потом читаем следующий. и так делее.
Конечно, volvo обязательно оптимизирует что-то здесь, всякие полезные слова добавит ... но и так можно ... :P ;) smile.gif

Ага, опережу его - можно удрать из записи координаты, если договориться скажем читать и записывать цвета участка экрана в определенном порядке . :D
Digitalator
А не лучше ли в файл записывать все содержимое полученно по GetImage?

т.е.
var x1,y1,x2,y2:word;
image:pointer;
f:file;
....
....

size = imagesize(x1,y1,x2,y2);
getmem(image,size);
GetImage(... image. .. ) {не помню синтаксис}
blockwrite(f, image^, size);

вот так примерно (проверить извиняйте не могу sad.gif )
Altair
Хм, действительно! rolleyes.gif

ТОгда GetImage(X,y,x1,y1,bufer) - читаем,
затем записываем в файл:
blockwrite...
ну а для чтения считываем изображение и выводим putimage.
APAL
Оффтоп.... по делу: 3. Все исходники должны помещаться в теги

Думаю для 1 строчки можно сделать исключение. smile.gif
BRS
Хм - а как гетимадж считать - подробнее давайте
volvo
Код

var
 size, x, y: integer;
 p: pointer;
 f: file;
...
{ запись в файл: }
size := imagesize(x1, y1, x2, y2);
getmem(p, size);
getimage(x1, y1, x2, y2, p^);
blockwrite(f, p^, size);

x := x1; y := y1;
{необходимо для восстановления фрагмента экрана в том же месте}

...
{ чтение из файла: }
blockread(f, p^, size);
putimage(x, y, p^, copyput);
freemem(p, size);


P.S. Такой способ будет работать если запись фрагмента изображения и его чтение происходят в одной программе и программа не прекращает работу между этими действиями... (т.е. не происходит выхода из программы.)
Digitalator
кстати, на сколько я помню, если вывести первые 15 байт из массива взятого по getimage, то в них можно обнаружить кое-какие полезности, в часности dx ,dy , а может и еще че-нить rolleyes.gif
BRS
необходимо чтоб этот файл можно было при послед. использовании проги использовать

(типа граф. редактор)
Digitalator
Цитата
при послед. использовании проги использовать

Всмысле чтоб подгружать в любое время и любой подобный файл можно было?
ну так в чем проблема - читаешь его блокридом как показано выше было и выводишь куда надо... потом сохраняешь куда надо. - что непоноятно?
volvo
Тогда можно создавать вместе с файлом, содержащим само изображение, еще один маленький файлик (допустим, с тем же именем, но с другим расширением), в котором будут храниться только координаты для вывода на экран ...

Digitalator
Проблема в том, что при выходе из программы он потеряет информацию о том, где первоначально находился фрагмент изображения ... :yes:
Digitalator
зачем много файлов делать? - это неудобно. в начало все того же добавить координаты. но зачем вообще координаты? я так полагаю, если в том же месте выводить, то координаты заранее известны, а если все время в разном - то они не нужны в файле т.к. будут расчитываться.....
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.