Технический форум по робототехнике.
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);
Master » 16 дек 2007, 20:20
А что должно получиться?
Myp » 18 дек 2007, 16:48
наверно должно получится библиотека для рисования всякой графики на графическом дисплее =)
Сергей » 22 дек 2007, 17:50
Могу я узнать почему название библиотеки GLCD? Просто както странно совпадает с названиями моих библиотек начинающихся на G.
Виталий » 22 дек 2007, 17:55
Да, да.. и Google тоже на G =)
Vooon » 22 дек 2007, 18:38
от сокращения Graphical LCD т.к. библа для графических дисплеев, чего тут странного?
также как и библа для работы с USART'ом у меня называется USART и дает два неймспейса usart0 и usart1
Добавлено спустя 5 минут 27 секунд:
а вобще ближе к теме плиз.
редакция пока таже, у меня сейчас работы полно, некогда...
Сергей » 22 дек 2007, 18:44
Виталий писал(а):Да, да.. и Google тоже на G =)
+1
Нужно зараннее расшифровывать)
Vooon » 24 дек 2007, 01:56
немного переписал копию под ПК GCC(G++)
добавил debug_driver и начал колдовать...
получилось и упростить и главное заставить работать правильно.
- Код: Выделить всё • Развернуть
Display:
{
#...##....................................................................................................................
#..#.##...##..............................................................................................................
#.#..##..#.##...##........................................................................................................
##...##.#..##..#.##...##..................................................................................................
##...###...##.#..##..#.##...##............................................................................................
#.#..###...###...##.#..##..#.##...##......................................................................................
#..#.##.#..###...###...##.#..##..#.##...##................................................................................
#...###..#.##.#..###...###...##.#..##..#.##...##..........................................................................
##...##...###..#.##.#..###...###...##.#..##..#.##...##....................................................................
#.#..###...##...###..#.##.#..###...###...##.#..##..#.##...##..............................................................
#..#.##.#..###...##...###..#.##.#..###...###...##.#..##..#.##...##........................................................
#...###..#.##.#..###...##...###..#.##.#..###...###...##.#..##..#.##...##..................................................
#...###...###..#.##.#..###...##...###..#.##.#..###...###...##.#..##..#.##...##............................................
#..#.##...###...###..#.##.#..###...##...###..#.##.#..###...###...##.#..##..#.##...##......................................
#.#..##..#.##...###...###..#.##.#..###...##...###..#.##.#..###...###...##.#..##..#.##...##................................
##...##.#..##..#.##...###...###..#.##.#..###...##...###..#.##.#..###...###...##.#..##..#.##...##..........................
......##...##.#..##..#.##...###...###..#.##.#..###...##...###..#.##.#..###...###...##.#..##..#.##...##....................
............##...##.#..##..#.##...###...###..#.##.#..###...##...###..#.##.#..###...###...##.#..##..#.#....................
..................##...##.#..##..#.##...###...###..#.##.#..###...##...###..#.##.#..###...###...##.#..#....................
........................##...##.#..##..#.##...###...###..#.##.#..###...##...###..#.##.#..###...###...#....................
..............................##...##.#..##..#.##...###...###..#.##.#..###...##...###..#.##.#..###...#....................
....................................##...##.#..##..#.##...###...###..#.##.#..###...##...###..#.##.#..#....................
..........................................##...##.#..##..#.##...###...###..#.##.#..###...##...###..#.#....................
................................................##...##.#..##..#.##...###...###..#.##.#..###...##...##....................
......................................................##...##.#..##..#.##...###...###..#.##.#..###...#....................
............................................................##...##.#..##..#.##...###...###..#.##.#..#....................
..................................................................##...##.#..##..#.##...###...###..#.#....................
........................................................................##...##.#..##..#.##...###...##....................
..............................................................................##...##.#..##..#.##...##....................
....................................................................................##...##.#..##..#.#....................
..........................................................................................##...##.#..#....................
................................................................................................##...#....................
}
потом, когда доделаю вывод шрифтов (+конвертор)
наверно выложу в паблик
SSG » 24 дек 2007, 12:22
А что это в окошке с кодом?
Очень похоже на слабозаполненную ленточную матрицу. Может её можно упаковать?
Vooon » 24 дек 2007, 14:16
это отладочный вывод фрейм-буффера в stdout
SSG » 25 дек 2007, 10:59
Ёклмн. Это ASCII скриншот!
И как я сразу не догадался.
Vooon » 25 дек 2007, 11:10
я немного подправил его - убрал номера строк, из-за них на маленьких разрешениях экрана строки расползались
и ессно что было непонятно.
Vooon » 27 дек 2007, 04:35
Начал писать конверторы, но есть проблема - как наилучшим образом преобразовать серый RGB в BW 1 бит?
- исходник
- 2.png (1.72 КиБ) Просмотров: 1968
- скрин результата
- i2_png.png (1.33 КиБ) Просмотров: 1964
SSG » 27 дек 2007, 14:13
Для сглаживания буквов можно попробовать утолщение-утончение, но для этого придется изображение векторизовать. Если нужно уменьшить кол-во мусора без векторизации, то используют математическую морфологию, логическую фильтрацию, замыкание-отмыкание и пр. Но чтоб написать такой фильтр самому нужно посидеть. Может лучше в каком-нибудь готовом редакторе перед бинаризацией с контрастностью побаловаться, да потом вручную подчистить? Ведь изображения-то наверняка загружаются не оптом.
Strijar » 27 дек 2007, 17:17
Vooon писал(а):Начал писать конверторы, но есть проблема - как наилучшим образом преобразовать серый RGB в BW 1 бит?
Рисовать сразу в BW. Для текста выбрать более подходящий шрифт, например Tahoma. А для преобразования можно взять ImageMagic. Картинки можно хранить например в xpm
Тогда инклюдить в код вообще не проблема