IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> Работа с графикой, Использование GetViewSettings
сообщение
Сообщение #1


Гость






Есть такая задача: Строится некоторое изображение
Запоминается его определенная область с помощью SetViewPort
Затем некоторый диалог с пользователем в текстовом режиме
Возврат в графический режим и попытка вернуть на экран изображение, которое запомнилось в SetViewPort, c помoщью GetViewSettings.

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


SetViewPort(10,10,110,110,Clipon);
...
...
...
GetViewSettings(??????)
Заранее спасибо)
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






Ну, начнем с того, что 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); { <--- Освобождаем буфер }
...

 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Гость






Buffer^ - это обращение через динамическую память?
А для чего тогда вообще нужен GetViewSettings?
Он просто возвращает значения?
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гость






А еще хотела спросить FreeMem и GetMem - это стандартые процедуры? Pointer - что это за тип? unsure.gif
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Гость






Цитата
Он просто возвращает значения?
yes2.gif Он просто запоминает установки (размеры и признак clipping-а) для текущего вьюпорта, но никак не его содержимое...

Цитата
FreeMem и GetMem - это стандартые процедуры?
yes2.gif
Цитата
Pointer - что это за тип?
Указатель, что же еще может быть... Помощь (Ctrl+F1) в твоем Паскале что, отсутствует?
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Гость






Разве может Help (пусть даже и мега -полноценный,что само по себе малореально) заменить непосредственное (пусть и интерактивное) общение?
Спасибо большое за ответы) give_rose.gif
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Пионер
**

Группа: Пользователи
Сообщений: 55
Пол: Женский
Реальное имя: АнЯ

Репутация: -  0  +


Хочу спросить, а как можно сохранить в файл и как потом вызвать оттуда изображение? Не в буфер сохранять, а в файл? Просто указать путь к файлу? blink.gif

Просто хочется попробовать сохранить в файл! Помогите пожалуйста!!! unsure.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Гость






После 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 }


Набирал прямо здесь - могут быть какие-то несоответствия, но идея - именно такая...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Пионер
**

Группа: Пользователи
Сообщений: 55
Пол: Женский
Реальное имя: АнЯ

Репутация: -  0  +


Спасибо, щас попробую)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10


Пионер
**

Группа: Пользователи
Сообщений: 55
Пол: Женский
Реальное имя: АнЯ

Репутация: -  0  +


а что значит 1,когда открываем на чтение файл и какого размера можно записать изображение в файл? Не более 64 также? Потому что Imagesize не вернет значение более 64 Кб,да?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #11


Гость






Если ты про второй параметр Reset/Rewrite, то это размер блока данных... Он важен потом, при чтении/записи данных через BlockRead или BlockWrite... Можно сказать, что это - минимальный размер блока данных, который можно записать в файл... Если, например, открыть файл через Rewrite(f, 3), то один байт в него записать уже не получится - только группами по 3 байта...

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

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


Пионер
**

Группа: Пользователи
Сообщений: 55
Пол: Женский
Реальное имя: АнЯ

Репутация: -  0  +



Да, была бы очень признательна за ссылку)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #13


Гость






Здесь:
Модули для вывода графики. (bmp, Pcx ...)
 К началу страницы 
+ Ответить 
сообщение
Сообщение #14


Пионер
**

Группа: Пользователи
Сообщений: 55
Пол: Женский
Реальное имя: АнЯ

Репутация: -  0  +


give_rose.gif Спасибо Вам за помощь! good.gif Все работает и я фьсьо поняла rolleyes.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 25.09.2021 10:51
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name