На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Страницы: (16) « Первая ... 6 7 [8] 9 10 ...  15 16 все  ( Перейти к последнему сообщению )  
> эмуляция BGI графики
    Цитата Der_Meister @
    Там интересно так... 1 пиксел весит 10 байт. 4 пиксела весят 10 байт. 5 пикселов - уже 18 вроде. Самое главное, BGI "портит" всю предоставленную ему память. То есть обнуляешь массив, а он вместо 1 пиксела еще 3 левых пишет и т.д.


    Да ничего интересного. Первые два слова - ширина/высота. Вид "кодирования" не указан нигде.

    Потом - данные для 4-х битовых плоскостей. См. руководство по программированию EGA.
    (это что касается 16-тицветных режимов). Для 8-битных и выше - проще.
    Сообщение отредактировано: barazuk -
      Да все я понимаю. Просто ты поробуй. На самом деле не все так просто.
        Цитата Der_Meister @
        Просто ты поробуй. На самом деле не все так просто.


        Дык пробовал. У меня даже редактор когда-то давно под это дело был. Вернее, конвертор из БМП.

        Кстати, а как ты вообще себе это представляешь? Большая часть задачек великомудрыми преподами задается в 16 цветах. Установка такого режима под виндой... Гм... Проблематична. Если без извратов. Так смысл вообще с этим разбираться?
          Цитата barazuk @
          Кстати, а как ты вообще себе это представляешь? Большая часть задачек великомудрыми преподами задается в 16 цветах. Установка такого режима под виндой... Гм... Проблематична. Если без извратов. Так смысл вообще с этим разбираться?

          Так я и не устанавливаю режим. Просто в массив по указателю должен писать то же самое, что и BGI
            Т.е. ты хочешь из 256- или более цветного режима брать картинку, уменьшать в ней количество цветов до 16, отслеживать изменения палитры?...
              Да я вообще-то битовые образы не гружу. :wacko:

              Добавлено
              Понял, про что ты.... Зачем уменьшать кол-во цветов? Я ведь и так знаю каждый цвет.
                angrylion
                Так kbhit имеется в conio.h :wacko:

                По крайней мере в MSVS2003. Работает без проблем.
                  Цитата Der_Meister @
                  Так kbhit имеется в conio.h

                  По крайней мере в MSVS2003. Работает без проблем.


                  :blink: Так то ж в консольных приблудах. Или?
                    А для неконсольных есть getch, которая уже реализована, или опять переопределять... :blink:


                    Структура картинок BGI:
                    ExpandedWrap disabled
                      [w][w][h][h][x][x][1-2][3-4][5-6][7-8]

                    w-ширина
                    h-высота
                    x-хз че, походу пустота.

                    На начальном этапе выделяется 10 байт. Если картинка не влазит, память увеличивается с шагом в 4 байта.


                    Короче, ща ф-цию imagesize напишу...

                    Добавлено
                    +imagesize

                    Целых 11 строк :o

                    Добавлено
                    Я почти разобрался. :) BGI еще и строки выравнивает зачем-то. То есть какую-то дрянь после каждой строки приписывает.

                    ExpandedWrap disabled
                      size=imagesize(0,0,1,0);
                      size=10
                       
                      size=imagesize(0,0,0,1);
                      size=14
                       
                      size=imagesize(0,0,0,2);
                      size=18
                       
                      size=imagesize(0,0,9,9);
                      size=86
                       
                      //Однако 6+10*10/2=56, плюс выравнивание, итого 58
                       
                      size=imagesize(0,0,99,58);
                      size=58


                    Получается 86-58=28 "лишних" байт. То есть по всем видам по 3 байта на строку + выравнивание до 16 бит.




                    P.S. Я чувствую себя мастером, выполняющим подделку...
                      Моя гипотеза [дожил, в проганье гипотезы... :lool:, все-таки как-то шатко это все...] оказалась верна: выравнивание 3 байта. Если строка одна, то выравнивание 2 байта.

                      ExpandedWrap disabled
                        [w][w][h][h][bit line][alignment]
                                    [bit line][alignment]
                                    [bit line][alignment]
                                    [bit line][alignment]
                        .................................
                                    [bit line][alignment]


                      Где-то ведь в мануале видел, что 10+4+4+4.... Не помню где. :unsure:

                      Добавлено
                      Функцию совершенно переделал, а все равно 11 строк... :lol:
                        Hi!
                        kbhit() из conio.h работает только в консольных Win32 прогах афаик. Так что в либе Der Meister'a нельзя пока написать чё-нить вроде:

                        while(!kbhit()) //с getch так нифига не выйдет, она возвращает символ, и пока чё-нить на клавиатуре не нажмёшь, цикл не начнёт выполняться
                        {
                        SleepEx(100,FALSE); //для задержки на 100 мс в windows.h.
                        cleardevice();
                        setcolor(rand()%15);
                        outtextxy(rand()%640,rand()%480,"\052"); //рисуем на случайн.месте звёздочку
                        }

                        Это типа скринсейвер такой:)
                        kbhit() есть в ещё одной реализации BGI на винде - WinBGI. Я просто посмотрел её исходник - вроде там всё просто. Исходник WinBGI - см. http://www.garret.ru/~knizhnik/winbgi.zip
                        Ридми к WinBGI - см. http://www.garret.ru/~knizhnik/readme.txt
                        P.S. Я вообще только начинаю кодить, так что если чё глупое сказал, извиняюсь.
                        Сообщение отредактировано: angrylion -
                          kbhit реализуемо через GetKeyboardState
                            Цитата trainer @
                            kbhit реализуемо через GetKeyboardState


                            Само собой. Просто ДМ почему-то уверен, что kbhit работает в GUI-приложениях. Или имеет более приоритетные фичи для реализации.
                              :wacko: На мой вопрос так никто и не ответил.... :wacko:

                              Похоже файл придется назвать DGML.h, а в исходнике писать так:

                              ExpandedWrap disabled
                                #ifdef _WINDOWS_
                                #include <dgml.h>
                                #else
                                #include <graphics.h>
                                #include <dos.h>
                                //etc.
                                #endif
                                Цитата Der_Meister @
                                А для неконсольных есть getch, которая уже реализована, или опять переопределять...


                                Нет, знамо дело... В смысле, нету ее.

                                Цитата Der_Meister @
                                На мой вопрос так никто и не ответил....


                                Народу, видать, по-барабану... Ты писАтель тут главный - тебе и решать... ;)
                                Сообщение отредактировано: barazuk -
                                1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
                                0 пользователей:
                                Страницы: (16) « Первая ... 6 7 [8] 9 10 ...  15 16 все


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,0454 ]   [ 14 queries used ]   [ Generated: 18.05.24, 08:49 GMT ]