Работа с видеобуфером

Тема в разделе "WASM.WIN32", создана пользователем theden, 27 апр 2005.

  1. theden

    theden New Member

    Публикаций:
    0
    Регистрация:
    27 апр 2005
    Сообщения:
    15
    Адрес:
    Киев
    Вобщем такая задача:

    надо написать на VC 6.0 програмку, которая используя процедурки написаные на асме-(асемблерные вставки) делает следующее:

    а) считывает из видеобуфера байты, которые представляют область на экране, скажем ректнагл 100х100 в позиции top:50 left:50

    б) такие же данные записывает



    если кто-то писал плз намекните как

    и/или мож кинете линку
     
  2. S_T_A_S_

    S_T_A_S_ New Member

    Публикаций:
    0
    Регистрация:
    27 окт 2003
    Сообщения:
    1.754
  3. theden

    theden New Member

    Публикаций:
    0
    Регистрация:
    27 апр 2005
    Сообщения:
    15
    Адрес:
    Киев
    Спасибо, я игрушку писал на ДиректХ



    тут просто надо написать брату курсовую работу, а я даже не знаю с чего приступить.

    асемблер знаю теоретически, хотя если популярно объяснить то реализую.



    было бы очень гуд если бы на вашем форуме помогли
     
  4. theden

    theden New Member

    Публикаций:
    0
    Регистрация:
    27 апр 2005
    Сообщения:
    15
    Адрес:
    Киев
    перефразированый вопрос



    написать программу на С,

    которая используя 2-е функции написаные на асемблере

    делает

    а) копирует из видеобуфера в память данные, которые

    представляют определённую облась на экране.

    эта область задаётся кооринатами левого-верхнего и

    правого-нижнего угла.



    б) копирует из памяти в видеобуфер данные

    в определённую область памяти.



    в виде примера использования этих функций

    написать программу, которая копирует

    квадратик 50х50, и потом "накладывая" на экран

    передвигает этот квадратик по экрану.





    Эта программа должна иметь (условно) такой вид:





    stuct RGBInfo

    {

    byte r;

    byte g;

    byte b;

    }



    typedef RGBInfo* VIDEODATA;







    LoadVideoBuffer(int x,int y, int width, int height,VIDEODATA &data);

    {

    asm code

    }



    SaveVideoBuffer(int x,int y, int width, int height,VIDEODATA data);

    {

    asm code

    }





    int main()

    {

    VIDEODATA square = null;

    VIDEODATA screen = null;

    LoadVideoBuffer(0,0,800,600,screen);

    LoadVideoBuffer(50,50,50,50,square);

    for (int i=50,i<750;i+=5)

    {

    SaveVideoBuffer(0,0,800,600,screen);

    SaveVideoBuffer(50+i,50,50,50,square);

    }







    return 0;

    }
     
  5. S_T_A_S_

    S_T_A_S_ New Member

    Публикаций:
    0
    Регистрация:
    27 окт 2003
    Сообщения:
    1.754
    Ну дык если DX знаешь и пиши на С. Потом можно получить asm листинги для нужных функций, и доработать их немного. Здесь больше возни с созданием интерфейсов и определением формата экрана, то что на С должно быть.



    Единственно - при алго как выше, скроллируемый кусок или мерцать будет или видно его не будет совсем, т.к. или буферизациию нужно, или синхронизацию по VSync.



    ЗЫ: используй тэг [cоde][/code] - красивее будет :)
     
  6. Ms Rem

    Ms Rem New Member

    Публикаций:
    0
    Регистрация:
    17 апр 2005
    Сообщения:
    1.057
    Адрес:
    С планеты "Земля"
    Под Windows напрямую работать с видеопамятью можно только из драйвера, а иначе придется юзать Direct X.
     
  7. theden

    theden New Member

    Публикаций:
    0
    Регистрация:
    27 апр 2005
    Сообщения:
    15
    Адрес:
    Киев
    странно в книжке не понмю кого был пример как в виндозе рисовать сглаженую линию (вроде режим 13h но мне это ничего не говорить)

    ладно раз никто не знает - буду мучать мануалы

    :-(
     
  8. S_T_A_S_

    S_T_A_S_ New Member

    Публикаций:
    0
    Регистрация:
    27 окт 2003
    Сообщения:
    1.754
    А что знать-то нужно? Ничего не спрашиваешь конкретного :)

    режим 13h - это DOS, а не виндос.

    А виндосе к видеопамяти всего 2 пути, для юзерденда только Direct X.
     
  9. theden

    theden New Member

    Публикаций:
    0
    Регистрация:
    27 апр 2005
    Сообщения:
    15
    Адрес:
    Киев
    это задание для 2-го курса

    ДиректХ не подходит - но сделал бы с удовольствием так

    Почему-то мне объяснили что присловутый квадратик должен двигаться в режиме ВГА

    буду разбираться
     
  10. S_T_A_S_

    S_T_A_S_ New Member

    Публикаций:
    0
    Регистрация:
    27 окт 2003
    Сообщения:
    1.754
    Поскольку топ в WASM.WIN32, то никто и не догадался, что нужно VGA :)

    Я бы посмотрел сорцы старых DOS'овских интро (гугл находит кучу или на sources.ru что-то есть) - какой-нибудь scroll - это то, что нужно. В большенстве, они на турбопаскале + inline asm (как раз те части, которые тебе нужны), переделать можно.

    Вот только разве MSVC 6.0 компилирует файлы для DOS?
     
  11. theden

    theden New Member

    Публикаций:
    0
    Регистрация:
    27 апр 2005
    Сообщения:
    15
    Адрес:
    Киев
    гы, равзве 800х600 32бита это не вга

    я что то в асме вобще запутался



    давай я тебе напишу простенькую нейросеть для прогнозирования валютного рынка

    а ты мне такую прожку?

    :)))



    п.с. мне так будет намного проще
     
  12. _BC_

    _BC_ БЦ

    Публикаций:
    0
    Регистрация:
    20 янв 2005
    Сообщения:
    759
    Я сразу на DOS/VGA подумал, но решил обождать... мало ли как щас вузы учат, может уже сразу на 2м курсе прямой х дают.



    Режим 13h -- самый простой и удобный. Видеопамять линейна, на один пиксел приходится 1 байт, который является индексом в таблице цветов. Сначала нужно настроить палитру (таблицу цветов), а рисование пиксела проще простого:

    [VideoBuf+y*320+x] = Color



    Перемещение квадратика с эффектом наложения -- это обычная техника прозрачных спрайтов: при копировании из SRC в DEST, проверяется, не равен ли соотв. цвет пиксела из SRC прозрачному цвету (обычно 0). Если равен -- значит оставить соотв. пиксел DEST без изменений, иначе -- копировать пиксел из SRC в DEST.



    А 800*600*32 -- это уже VESA, а не 13h.



    В качестве учебного пособия рекомендую скачать книгу Андре Ла Мота.
     
  13. theden

    theden New Member

    Публикаций:
    0
    Регистрация:
    27 апр 2005
    Сообщения:
    15
    Адрес:
    Киев
    сенкс фор наводка

    после праздников обязательно займусь

    всем классного отдыха
     
  14. S_T_A_S_

    S_T_A_S_ New Member

    Публикаций:
    0
    Регистрация:
    27 окт 2003
    Сообщения:
    1.754
    800х600 - это SVGA.

    А зачем валютный рынок? Нужна нейросеть, которая будет EXE Cryptor распаковавать :)
     
  15. theden

    theden New Member

    Публикаций:
    0
    Регистрация:
    27 апр 2005
    Сообщения:
    15
    Адрес:
    Киев
    такого не писал, так как сейчас есть активный проэкто то и не буду, но если хорошо заплатишь....

    :)
     
  16. S_T_A_S_

    S_T_A_S_ New Member

    Публикаций:
    0
    Регистрация:
    27 окт 2003
    Сообщения:
    1.754
    Ну почему же на халяву никто ничего не хочет писать :-((((
     
  17. theden

    theden New Member

    Публикаций:
    0
    Регистрация:
    27 апр 2005
    Сообщения:
    15
    Адрес:
    Киев
    Потому что есть много умников, особенно мерикоских

    которые тебя обламают на !!!500баксов за проэктик

    а потом нагребут на нём 10000у.е. вот и пиши тада на халяву.
     
  18. S_T_A_S_

    S_T_A_S_ New Member

    Публикаций:
    0
    Регистрация:
    27 окт 2003
    Сообщения:
    1.754
    Вот видишь, у тебя есть свои причины, почему бы им не быть у других :derisive:
     
  19. theden

    theden New Member

    Публикаций:
    0
    Регистрация:
    27 апр 2005
    Сообщения:
    15
    Адрес:
    Киев
    если бы я на этом мега проэкте подрывал лаве вобще

    был бы другой разговор

    а так - это просто студенты, которые не работают.
     
  20. S_T_A_S_

    S_T_A_S_ New Member

    Публикаций:
    0
    Регистрация:
    27 окт 2003
    Сообщения:
    1.754
    Дык студенты эти не только не работают, но и учиться не хотят :)))



    Лучше проясни условия - под виндос или ДОС.