roboforum.ru

Технический форум по робототехнике.

Graph. LCD lib пишу [fixed]

Graph. LCD lib пишу [fixed]

Vooon » 14 дек 2007, 11:17

пишу собственную библу для работы с MT-12232

вобщем-то большую часть передрал с других библиотек,
сложности возникли со своими: lcd::bitmap();
никак не пойму почему так происходит:


чтоб не качать все исходники привожу куски кода.

Код: Выделить всёРазвернуть
namespace bitmaps
{
   /* 6x8
    * [*   **]
    * [*  * *]
    * [* *  *]
    * [**   *]
    * [**   *]
    * [* *  *]
    * [*  * *]
    * [*   **]
    */
   uint8_t PROGMEM c1_bmp__data[] = {
      0xff, 0x18, 0x24, 0x42, 0x81, 0xff
   };
   bitmap_pt c1_bmp = {6, 8, c1_bmp__data};
   
   /* 6x16
    * [*   **]
    * [*  * *]
    * [* *  *]
    * [**   *]
    * [**   *]
    * [* *  *]
    * [*  * *]
    * [*   **]
    * [**   *]
    * [* *  *]
    * [*  * *]
    * [*   **]
    * [*   **]
    * [*  * *]
    * [* *  *]
    * [**   *]
    */
   uint8_t PROGMEM c2_bmp__data[] = {
      0xff, 0x18, 0x24, 0x42, 0x81, 0xff,
      0xff, 0x81, 0x42, 0x24, 0x18, 0xff
   };
   bitmap_pt c2_bmp = {6, 16, c2_bmp__data};
}

lcd glcd;

int main(void)
{
   glcd.bitmap(0,   0,   &bitmaps::c2_bmp);
   glcd.bitmap(6,   1,   &bitmaps::c2_bmp);
   glcd.bitmap(12,   2,   &bitmaps::c2_bmp);
   glcd.bitmap(18,   3,   &bitmaps::c2_bmp);
   glcd.bitmap(24,   4,   &bitmaps::c2_bmp);
   glcd.bitmap(30,   5,   &bitmaps::c2_bmp);
   glcd.bitmap(36,   6,   &bitmaps::c2_bmp);
   glcd.bitmap(42,   7,   &bitmaps::c2_bmp);
   glcd.bitmap(48,   8,   &bitmaps::c2_bmp);
   glcd.bitmap(54,   9,   &bitmaps::c2_bmp);
   glcd.bitmap(60,   10,   &bitmaps::c2_bmp);
   glcd.bitmap(66,   11,   &bitmaps::c2_bmp);
   glcd.bitmap(72,   12,   &bitmaps::c2_bmp);
   glcd.bitmap(78,   13,   &bitmaps::c2_bmp);
   glcd.bitmap(84,   14,   &bitmaps::c2_bmp);
   glcd.bitmap(90,   15,   &bitmaps::c2_bmp);
   glcd.bitmap(96,   16,   &bitmaps::c2_bmp);
   glcd.update();

   while(1)
      wdt_reset();
   return 0;
};


Код: Выделить всёРазвернуть
void lcd::bitmap(uint8_t left, uint8_t top, bitmap_t *bmp, operation_t op)
{
   uint8_t *dat, *p1, *p2;
   uint8_t x, y;
   uint8_t tt;
   uint16_t t1, t2;
   
   tt = top % 8;
   dat = bmp->data;
   
   for(y=(top>>3); y <= ((top+bmp->heigth-1)>>3); y++)
      for(x=left; x <= (left+bmp->width-1); x++)
      {
         t1 = pgm_read_byte(dat++);
         t2 = 0xff;
         switch(op)
         {
            case OP_NORMALL:
               break;
            case OP_INV:
               t1 = 0xff & ~t1;
               break;
            case OP_SET:
            case OP_OR:
            case OP_CLEAR:
            case OP_AND:
            case OP_XOR:
               break;
         }
         if(tt)
         {
            t1 <<= tt;
            t2 <<= tt;
            t2 = ~t2;
            p1 = (uint8_t*) &t1;
            p2 = (uint8_t*) &t2;
            rmw(x, y,   *p1,      *p2);
            rmw(x, y+1,   *(p1+1),   *(p2+1));
         }
         else
         {
            rmw(x, y, (uint8_t)t1, 0x00);
         }
      }
}


Код: Выделить всёРазвернуть
      /**
       * Изменить набор пикселей ( \a x ; \a 0+8*y ) -> ( \a x ; \a 7+8*y )
       * \f[ w = (r \and clear_mask) \or mask \f]
       * \param x
       * \param y range(4) -> (0, 1, 2, 3)
       * \param mask
       * \param clear_mask
       * \return pixels state
       */
      uint8_t rmw(uint8_t x, uint8_t y, uint8_t mask, uint8_t clear_mask);

Re: GLCD lib пишу

Master » 16 дек 2007, 20:20

А что должно получиться?

Re: GLCD lib пишу

Myp » 18 дек 2007, 16:48

наверно должно получится библиотека для рисования всякой графики на графическом дисплее =)

Re: GLCD lib пишу

Сергей » 22 дек 2007, 17:50

Могу я узнать почему название библиотеки GLCD? Просто както странно совпадает с названиями моих библиотек начинающихся на G.

Re: GLCD lib пишу

Виталий » 22 дек 2007, 17:55

Да, да.. и Google тоже на G =)

Re: GLCD lib пишу

Vooon » 22 дек 2007, 18:38

от сокращения Graphical LCD т.к. библа для графических дисплеев, чего тут странного?
также как и библа для работы с USART'ом у меня называется USART и дает два неймспейса usart0 и usart1

Добавлено спустя 5 минут 27 секунд:
а вобще ближе к теме плиз.
редакция пока таже, у меня сейчас работы полно, некогда...

Re: GLCD lib пишу

Сергей » 22 дек 2007, 18:44

Виталий писал(а):Да, да.. и Google тоже на G =)
+1
Нужно зараннее расшифровывать)

Re: Graph. LCD lib пишу [fixed]

Vooon » 24 дек 2007, 01:56

немного переписал копию под ПК GCC(G++)
добавил debug_driver и начал колдовать...
получилось и упростить и главное заставить работать правильно.

Код: Выделить всёРазвернуть
Display:
{
#...##....................................................................................................................
#..#.##...##..............................................................................................................
#.#..##..#.##...##........................................................................................................
##...##.#..##..#.##...##..................................................................................................
##...###...##.#..##..#.##...##............................................................................................
#.#..###...###...##.#..##..#.##...##......................................................................................
#..#.##.#..###...###...##.#..##..#.##...##................................................................................
#...###..#.##.#..###...###...##.#..##..#.##...##..........................................................................
##...##...###..#.##.#..###...###...##.#..##..#.##...##....................................................................
#.#..###...##...###..#.##.#..###...###...##.#..##..#.##...##..............................................................
#..#.##.#..###...##...###..#.##.#..###...###...##.#..##..#.##...##........................................................
#...###..#.##.#..###...##...###..#.##.#..###...###...##.#..##..#.##...##..................................................
#...###...###..#.##.#..###...##...###..#.##.#..###...###...##.#..##..#.##...##............................................
#..#.##...###...###..#.##.#..###...##...###..#.##.#..###...###...##.#..##..#.##...##......................................
#.#..##..#.##...###...###..#.##.#..###...##...###..#.##.#..###...###...##.#..##..#.##...##................................
##...##.#..##..#.##...###...###..#.##.#..###...##...###..#.##.#..###...###...##.#..##..#.##...##..........................
......##...##.#..##..#.##...###...###..#.##.#..###...##...###..#.##.#..###...###...##.#..##..#.##...##....................
............##...##.#..##..#.##...###...###..#.##.#..###...##...###..#.##.#..###...###...##.#..##..#.#....................
..................##...##.#..##..#.##...###...###..#.##.#..###...##...###..#.##.#..###...###...##.#..#....................
........................##...##.#..##..#.##...###...###..#.##.#..###...##...###..#.##.#..###...###...#....................
..............................##...##.#..##..#.##...###...###..#.##.#..###...##...###..#.##.#..###...#....................
....................................##...##.#..##..#.##...###...###..#.##.#..###...##...###..#.##.#..#....................
..........................................##...##.#..##..#.##...###...###..#.##.#..###...##...###..#.#....................
................................................##...##.#..##..#.##...###...###..#.##.#..###...##...##....................
......................................................##...##.#..##..#.##...###...###..#.##.#..###...#....................
............................................................##...##.#..##..#.##...###...###..#.##.#..#....................
..................................................................##...##.#..##..#.##...###...###..#.#....................
........................................................................##...##.#..##..#.##...###...##....................
..............................................................................##...##.#..##..#.##...##....................
....................................................................................##...##.#..##..#.#....................
..........................................................................................##...##.#..#....................
................................................................................................##...#....................
}


потом, когда доделаю вывод шрифтов (+конвертор)
наверно выложу в паблик

Re: Graph. LCD lib пишу [fixed]

SSG » 24 дек 2007, 12:22

А что это в окошке с кодом? :shock:
Очень похоже на слабозаполненную ленточную матрицу. Может её можно упаковать?

Re: Graph. LCD lib пишу [fixed]

Vooon » 24 дек 2007, 14:16

это отладочный вывод фрейм-буффера в stdout

Re: Graph. LCD lib пишу [fixed]

SSG » 25 дек 2007, 10:59

Ёклмн. Это ASCII скриншот! :) И как я сразу не догадался. :(

Re: Graph. LCD lib пишу [fixed]

Vooon » 25 дек 2007, 11:10

я немного подправил его - убрал номера строк, из-за них на маленьких разрешениях экрана строки расползались
и ессно что было непонятно.

Re: Graph. LCD lib пишу [fixed]

Vooon » 27 дек 2007, 04:35

Начал писать конверторы, но есть проблема - как наилучшим образом преобразовать серый RGB в BW 1 бит?

2.png
исходник
2.png (1.72 КиБ) Просмотров: 1968
i2_png.png
скрин результата
i2_png.png (1.33 КиБ) Просмотров: 1964
image2bitmap.py
конвертор
(3.13 КиБ) Скачиваний: 254

Re: Graph. LCD lib пишу [fixed]

SSG » 27 дек 2007, 14:13

Для сглаживания буквов можно попробовать утолщение-утончение, но для этого придется изображение векторизовать. Если нужно уменьшить кол-во мусора без векторизации, то используют математическую морфологию, логическую фильтрацию, замыкание-отмыкание и пр. Но чтоб написать такой фильтр самому нужно посидеть. Может лучше в каком-нибудь готовом редакторе перед бинаризацией с контрастностью побаловаться, да потом вручную подчистить? Ведь изображения-то наверняка загружаются не оптом.

Re: Graph. LCD lib пишу [fixed]

Strijar » 27 дек 2007, 17:17

Vooon писал(а):Начал писать конверторы, но есть проблема - как наилучшим образом преобразовать серый RGB в BW 1 бит?


Рисовать сразу в BW. Для текста выбрать более подходящий шрифт, например Tahoma. А для преобразования можно взять ImageMagic. Картинки можно хранить например в xpm ;) Тогда инклюдить в код вообще не проблема


Rambler\'s Top100 Mail.ru counter