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

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

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

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


Гость






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

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


SetViewPort(10,10,110,110,Clipon);
...
...
...
GetViewSettings(??????)
Заранее спасибо)
 К началу страницы 
+ Ответить 
volvo
сообщение 14.01.2007 10:15
Сообщение #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); { <--- Освобождаем буфер }
...

 К началу страницы 
+ Ответить 
-=Cherry=-
сообщение 14.01.2007 10:23
Сообщение #3


Гость






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


Гость






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


Гость






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

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


Гость






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


Пионер
**

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

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


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

Просто хочется попробовать сохранить в файл! Помогите пожалуйста!!! unsure.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 17.01.2007 15:33
Сообщение #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 }


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


Пионер
**

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

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


Спасибо, щас попробую)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
-=АнЮтА=-
сообщение 17.01.2007 15:59
Сообщение #10


Пионер
**

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

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


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


Гость






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

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

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


Пионер
**

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

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



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


Гость






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


Пионер
**

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

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


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

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

 



- Текстовая версия 20.07.2025 15:09
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"