| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Asm для начинающих > вывод изображения |
| Автор: iff 18.11.2009, 17:43 | ||
| ОС: DOS/Windows Компилятор: TASM 5.0 Суть проблемы: Я пишу программу для вывода графического файла (640 на 480), придуманного мною формата на экран. В программе исползовал такую структуру:
Из кода программы видно, что она представляет собой 2 вложенных один в другой цикла. Всё работает. Но уж очень медленно. Как сделать побыстрей? У меня есть на этот счёт идея: нужно взять из оперативной памяти достаточно большой кусок данных и поместить его в определённое место в видеопамяти, но как это сделать... А каков ваш способ? |
| Автор: iff 18.11.2009, 19:02 |
| Никто не знает? |
| Автор: iff 18.11.2009, 22:27 | ||
Попробовал сделать так:
Результат есть. Если поставить значение цвета ffff, то выведется линия из белых токек, если поставить 00, то точек не будет видно (чёрный цвет), ну а если поставить значение цвета ee24, то отнють не появятся разноцветные пиксели. А появится пунктир (то черная точка, то белая) Создалось такое впечатление что этот графический режим черно-белый. Но ведь это не так. В чём ошибка? Для справки: используется графический режим 12h |
| Автор: 111u3 19.11.2009, 03:52 |
| iff, прочитай внимательно про то прерывание которое ты используешь, может увидишь свою ошибку |
| Автор: Mikl_ 19.11.2009, 04:28 |
| iff, вывод графики на экран по-точечно будет очень медленным, обычно выводят данные куском в буфер видеопамяти, начиная с адреса 0A000:0000h до 0AFFF:FFFFh предварительно установив нужный режим 12h, 13h, режимы VESA (если нужно разрешение экрана больше чем 320х200 и более 256 цветов), предварительно устанавливают палитру или выводят в режиме True color -- более подробно смотри в гугле например "вывод BMP на экран". Здесь тоже были примеры в разделе "Asm для DOS/Windows" |
| Автор: iff 19.11.2009, 19:19 |
| 111u3, Код представленный в моём первом посте работает (это вроде как значит отсутствие ошибок). Т.е. проблема не втом, что программа не работает, а в том, что, как уже сказал Mikl_, в слишком медленной работе этих прерываний. |
| Автор: 111u3 19.11.2009, 20:37 |
| iff, я имел ввиду то что ты обращаешся не так и не то пишешь в видеопамять когда напрямую к ней обращаешся. |
| Автор: iff 19.11.2009, 21:03 |
| А как надо? |
| Автор: 111u3 20.11.2009, 17:14 |
| Как надо тебе учебник по ассемблеру скажет, я не ходячий справочник чтобы помнить все наизусть, да и лениво это. Ты лучше побольше кода приведи, а еще лучше весь тогда как ошибку исправить покажу. может быть. |