|
0 / 0 / 0
Регистрация: 01.01.2010
Сообщений: 13
|
|
сохранить изображение в файл01.01.2010, 21:00. Показов 3977. Ответов 18
Метки нет (Все метки)
здравствуйте!
у меня вопрос:как в графическом режиме сохранить изображение(например квадратик) в файл??? создание и закрытие файла есть, а с записью не получается(((
0
|
|
| 01.01.2010, 21:00 | |
|
Ответы с готовыми решениями:
18
Сохранить изображение на форме в файл |
|
617 / 22 / 0
Регистрация: 30.09.2007
Сообщений: 357
|
|
| 02.01.2010, 10:19 | |
|
0
|
|
|
0 / 0 / 0
Регистрация: 01.01.2010
Сообщений: 13
|
||||||
| 02.01.2010, 14:35 [ТС] | ||||||
|
в исходниках ничего не нашел.
задание полностью звучит так: Разработать резидентный обработчик прерывания, который при вызове из программы копирует в файл изображение, находящееся в некоторой области экрана. Разработать тестирующую программу тестирующей программой выводится изображение на экран и вызывается резидентная программа, вот эта резидентная программа и должна сохранить это изображение в файл. вот что у меня получилось:
0
|
||||||
|
1779 / 757 / 153
Регистрация: 03.06.2009
Сообщений: 5,940
|
|
| 02.01.2010, 20:19 | |
|
из обработчика нельзя просто так вызывать другие прерывания
Вот порядок: ;Особенности резидентных программ ;TSR-программы имеют некоторые особенности, отличающие их от "нормальных" программ. ;Им не разрешается использовать DOS-прерывания, когда вздумается. Это связано с тем, что DOS проектировалась как однозадачная операционная система, поэтому модули DOS не обладают свойством реентерабельности (повторной входимости). Что это означает на практике? ;Допустим, Ваша программа записывает длинный файл на диск. Во время записи вы (возможно, случайно) нажали клавишу, активизирующую TSR-программу записи содержимого экрана в файл. ;Теперь доступа к диску требуют две программы - прикладная, записывающая длинный файл, и Ваша TSR-программа. Запись файла из прикладной программы приостановится, далее произойдет запись копии экрана в файл, после чего возобновится запись файла из прикладной программы. Все было бы хорошо, если бы прикладная программа и TSR-программа не использовали одни и те же внутренние области данных DOS для работы с диском. При запуске TSR-программа безвозвратно испортит текущее состояние служебных областей данных, которые прикладная программа использовала при записи на диск. ;И таких примеров можно привести много. BIOS также далеко не весь реентерабельный. TSR-программа может смело использовать разве лишь прерывание 16h для работы с клавиатурой, которое реентерабельно. Для вывода на экран лучше всего использовать непосредственную запись символов в видеопамять дисплейного адаптера. ;Не стоит пользоваться многими функциями библиотеки Quick C, так как они могут вызывать прерывания DOS. Например, функция malloc() вызывает прерывание DOS для определения размера свободной памяти в системе. ;Могут возникнуть трудности с использованием арифметических действий с числами в формате плавающей запятой, так как функция _dos_keep() при завершении программы восстанавливает прерывания, использовавшиеся для эмуляции арифметики с плавающей запятой и для работы с арифметическим сопроцессором. ;Некоторые из перечисленных проблем (те, что связаны с использованием прерываний DOS) можно решить с помощью недокументированного прерывания INT 28h. ;Это прерывание вызывается DOS при ожидании ввода с клавиатуры. В этот момент вы можете использовать любое прерывание DOS, кроме функций от 00h до 0Сh прерывания INT 21h. Утилита спулинга печати PRINT.COM использует это прерывание. ;Можно рекомендовать следующий способ использования прерывания 28h. Обработчик прерывания 9 отслеживает нажатие клавиши, которая должна активизировать TSR-программу. Обнаружив эту клавишу (или комбинацию клавиш), обработчик прерывания 9 устанавливает флаг запроса на активизацию TSR-программы и завершает свою работу обычным способом. ;Ваша TSR-программа должна создать свой обработчик прерывания 28h и сцепить его со стандартным. Каждый раз, когда DOS ожидает ввода с клавиатуры (в этот момент DOS не использует сама свои прерывания), вызывается прерывание 28h. Ваш обработчик проверяет флаг активизации, устанавливаемый обработчиком прерывания 9, и если флаг установлен, TSR-программа активизируется и может пользоваться услугами DOS, в частности, файловой системой. ;Разумеется, после выполнения всех необходимых действий TSR-программа должна сбросить флаг активизации.
0
|
|
|
0 / 0 / 0
Регистрация: 01.01.2010
Сообщений: 13
|
||||||
| 02.01.2010, 20:57 [ТС] | ||||||
|
спасибо за информацию, но я это все сделал и все нормально работает. вот только не знаю как сохранить в файл изображение с области экрана. вот прочитал про прерывание int 10h, и ее функции 0dh-чтение пикселя в заданной точке экрана. удается сохранить один байт с экрана. но полностью всю область фигуры не получается. программа зависает. вот что я сделал:
0
|
||||||
|
1779 / 757 / 153
Регистрация: 03.06.2009
Сообщений: 5,940
|
|
| 02.01.2010, 22:00 | |
|
а сегментный регистр es настроен? А то я вижу, что вместо ds используется cs. Команда stosb сохраняет в es:di, да и для int 21h bufin должен быть не в cs:dx, а в ds:dx!
0
|
|
|
0 / 0 / 0
Регистрация: 01.01.2010
Сообщений: 13
|
|
| 02.01.2010, 22:05 [ТС] | |
|
это у меня в резидентной программе, и все переменные находятся в кодовом сегменте, так как программа .ком не может содержать сегмента данных
0
|
|
|
1779 / 757 / 153
Регистрация: 03.06.2009
Сообщений: 5,940
|
|
| 02.01.2010, 22:11 | |
|
при чем здесь это? когда резидентная программа получает управление по прерыванию, все сегментные регистры кроме cs будут иметь произвольные значения! cs<>ds<>es. То есть они буду иметь значения, которые имели в программе пользователя до прерывания, и их нужно принудительно настроить.
0
|
|
|
0 / 0 / 0
Регистрация: 01.01.2010
Сообщений: 13
|
||||||
| 02.01.2010, 22:16 [ТС] | ||||||
|
типа такого??? или я вас не понял...
0
|
||||||
|
1779 / 757 / 153
Регистрация: 03.06.2009
Сообщений: 5,940
|
|
| 02.01.2010, 22:18 | |
|
да, совершенно верно, и такое же нужно проделать с ds, и после этого это будет почти сом-программа)
0
|
|
|
0 / 0 / 0
Регистрация: 01.01.2010
Сообщений: 13
|
|
| 02.01.2010, 22:22 [ТС] | |
|
а вместо cs:bufin прописать ds:bufin???
зачем? ведь у нас нет сегмента данных???
0
|
|
|
1779 / 757 / 153
Регистрация: 03.06.2009
Сообщений: 5,940
|
|
| 02.01.2010, 22:25 | |
|
требование функции 40h прерывания 21h, чтобы буфер находился в ds:dx, а не cs:dx и не в es:dx.
Функция будет искать его именно в ds:dx
0
|
|
|
0 / 0 / 0
Регистрация: 01.01.2010
Сообщений: 13
|
|
| 02.01.2010, 22:28 [ТС] | |
|
а как мне поступить в моем случае
0
|
|
|
1779 / 757 / 153
Регистрация: 03.06.2009
Сообщений: 5,940
|
||||||
| 02.01.2010, 22:30 | ||||||
|
думаю, настроить ds
и естественно вернуть их в первоначальное положение перед выходом из обработчика
0
|
||||||
|
0 / 0 / 0
Регистрация: 01.01.2010
Сообщений: 13
|
|
| 02.01.2010, 22:38 [ТС] | |
|
меня смущает другое, то что я использую функцию 0dh прерывания int 10h. правильно ли я делаю??
или есть другие функции чтения пикселя с экрана?
0
|
|
|
1779 / 757 / 153
Регистрация: 03.06.2009
Сообщений: 5,940
|
|
| 03.01.2010, 15:26 | |
|
другие - это только прямое обращение к видеопамяти, но в каждом режиме пиксель на экране шифруется по-разному. Если писать программу под какой-то конкретный видеорежим, то можно просто скопировать кусок видеопамяти.
0
|
|
|
0 / 0 / 0
Регистрация: 01.01.2010
Сообщений: 13
|
|
| 03.01.2010, 15:33 [ТС] | |
|
не подскажете как это сделать, привести пример если не трудно??? я работаю с режимом VGA, но можно и на других...
0
|
|
|
1779 / 757 / 153
Регистрация: 03.06.2009
Сообщений: 5,940
|
||||||
| 03.01.2010, 15:40 | ||||||
|
Есть пример только для текстового режима:
0
|
||||||
|
0 / 0 / 0
Регистрация: 01.01.2010
Сообщений: 13
|
|
| 03.01.2010, 17:10 [ТС] | |
|
спасибо но кажется это не поможет для моего примера... а нет других примеров считывания с экрана... вот я нашел примерчик вот тока не понял как там делается... сможете урезать код чтоб только сохранял в файл, и не перехватывал никаких прерывании. можно под .exe файл
0
|
|
| 03.01.2010, 17:10 | |
|
Помогаю со студенческими работами здесь
19
Сохранить сформированное изображение в файл Как сохранить в файл изображение? Как сохранить изображение в файл? Сохранить изображение с Panel в файл
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
|
[В процессе разработки] SDL3 для Web (WebAssembly): Сборка библиотек SDL3 и Box2D из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
|
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога
Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
|
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование
. \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json>
Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом.
# Check if. . .
|
|
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так:
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347
Основана на STM32F303RBT6.
На борту пять. . .
|
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
|
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу,
и светлой Луне.
В мире
покоя нет
и люди
не могут жить в тишине.
А жить им немного лет.
|
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила»
«Время-Деньги»
«Деньги -Пуля»
|