Помощь - Поиск - Пользователи - Календарь
Полная версия: Работа с графикой
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
-=Cherry=-
Есть такая задача: Строится некоторое изображение
Запоминается его определенная область с помощью SetViewPort
Затем некоторый диалог с пользователем в текстовом режиме
Возврат в графический режим и попытка вернуть на экран изображение, которое запомнилось в SetViewPort, c помoщью GetViewSettings.

Суть вопроса заключается в том,чтобы правильно указать данные для этой процедуры (не очень понятно как использовать параметр ViewInfo)
Буду очень признательна,если приведете конкретный пример)


SetViewPort(10,10,110,110,Clipon);
...
...
...
GetViewSettings(??????)
Заранее спасибо)
volvo
Ну, начнем с того, что SetViewPort ничего не запоминает, эта процедура просто напросто устанавливает размеры текущего вьюпорта... Запоминание делать так:

var
Buffer: Pointer;
size: integer;
...
size := ImageSize(x1, y1, x2, y2); { <--- размеры области }
{
!!!!!
Если размер картинки из области, которую ты хочешь сохранить
будет больше 64К, то size будет = 0, и GetResult (сразу после вызова ImageSize)
вернет значение grError, потому, что ты все равно не сможешь выделить кусок памяти
такого размера... Тогда придется разбивать изображение на части...
}

GetMem(Buffer, size);
GetImage(x1, y1, x2, y2, Buffer^);
{ В принципе, можно и в файл записать... Для надежности }

... { <-- Здесь делаешь, что тебе надо }

{ Восстанавливаем картинку: }
PutImage(x1, y1, Buffer^, NormalPut);
FreeMem(Buffer, size); { <--- Освобождаем буфер }
...

-=Cherry=-
Buffer^ - это обращение через динамическую память?
А для чего тогда вообще нужен GetViewSettings?
Он просто возвращает значения?
Гость
А еще хотела спросить FreeMem и GetMem - это стандартые процедуры? Pointer - что это за тип? unsure.gif
volvo
Цитата
Он просто возвращает значения?
yes2.gif Он просто запоминает установки (размеры и признак clipping-а) для текущего вьюпорта, но никак не его содержимое...

Цитата
FreeMem и GetMem - это стандартые процедуры?
yes2.gif
Цитата
Pointer - что это за тип?
Указатель, что же еще может быть... Помощь (Ctrl+F1) в твоем Паскале что, отсутствует?
-=Cherry=-
Разве может Help (пусть даже и мега -полноценный,что само по себе малореально) заменить непосредственное (пусть и интерактивное) общение?
Спасибо большое за ответы) give_rose.gif
-=АнЮтА=-
Хочу спросить, а как можно сохранить в файл и как потом вызвать оттуда изображение? Не в буфер сохранять, а в файл? Просто указать путь к файлу? blink.gif

Просто хочется попробовать сохранить в файл! Помогите пожалуйста!!! unsure.gif
volvo
После GetImage делаешь

Assign(f, 'pic.dat');
rewrite(f, size); { <--- size - то значение, которое вернулось из ImageSize }
blockwrite(f, Buffer^, 1);
close(f);


Чтобы прочесть картинку из файла:
Assign(f, 'pic.dat');
reset(f, 1);
getmem(buffer, filesize(f));
blockread(f, buffer^, filesize(f));
close(f);
...
{ и потом уже этот буфер записываешь на нужное место экрана с помощью PutImage }


Набирал прямо здесь - могут быть какие-то несоответствия, но идея - именно такая...
-=АнЮтА=-
Спасибо, щас попробую)
-=АнЮтА=-
а что значит 1,когда открываем на чтение файл и какого размера можно записать изображение в файл? Не более 64 также? Потому что Imagesize не вернет значение более 64 Кб,да?
volvo
Если ты про второй параметр Reset/Rewrite, то это размер блока данных... Он важен потом, при чтении/записи данных через BlockRead или BlockWrite... Можно сказать, что это - минимальный размер блока данных, который можно записать в файл... Если, например, открыть файл через Rewrite(f, 3), то один байт в него записать уже не получится - только группами по 3 байта...

Цитата
какого размера можно записать изображение в файл?
Любого... Если читать картинку кусками, и записывать в файл порциями, а не всю сразу, то в принципе можно сохранять экраны любой сложности... Правда потом будет не так просто это прочитать, но это уже другой вопрос... smile.gif

Кстати, у нас на форуме выложены процедуры (в модуле) для снятия скриншотов, сохраняющие экран в файл формата BMP/PCX, вот тут точно не возникнет проблем при сохранении любого изображения, и при его восстановлении тоже... Если тебя это заинтересует - дам ссылку
-=АнЮтА=-

Да, была бы очень признательна за ссылку)
-=АнЮтА=-
give_rose.gif Спасибо Вам за помощь! good.gif Все работает и я фьсьо поняла rolleyes.gif
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.