Русские шрифты для библиотеки FabGL.

Iv_
Iv_ аватар
Offline
Зарегистрирован: 06.04.2022

Превосходная библиотека FabGL! VGA монитор, вполне себе не плохой дисплей на 17..20"  для ESP32. Библиотека постоянно обновляется и уже не плохо работает. Мышка/клавиатура/дисплей VGA/генерация звука , очень не плохой набор инструментов для ESP32.

https://github.com/fdivitto/FabGL

Не могу ни как победить русификацию шрифтов.

Есть встроенный инструмент  Fonttool. С Питоном не дружу, даже не знаю как запустить готовую прогу на Пайтоне...

https://github.com/fdivitto/FabGL/tree/master/tools/fonttool

Помогите, люди добрые, кто чем сможет...

 

b707
Offline
Зарегистрирован: 26.05.2017

Iv_. во-первых, вставьте ссылки правильно. для этого есть отдельная кнопка в интерфейсе.

Во-вторых - какой формат фонтов поддерживает библиотека? Под формат GFX Adafruit на форуме несколько библиотек руссифицировано уже...

Iv_
Iv_ аватар
Offline
Зарегистрирован: 06.04.2022

b707 пишет:

Iv_. во-первых, вставьте ссылки правильно. для этого есть отдельная кнопка в интерфейсе.

Во-вторых - какой формат фонтов поддерживает библиотека? Под формат GFX Adafruit на форуме несколько библиотек руссифицировано уже...

Постараюсь разобраться с тонкостями форума. C GFX у меня без проблем, на любых дисплеях, всё пр русски.

У Фабрицио Ди Витторио свои шрифты/библиотека шрифтов, видимо некоторого стандартного(не стандартного?) формата. У него есть компилятор шрифтов на Пайтоне, с которым мне нужно разобраться.

Iv_
Iv_ аватар
Offline
Зарегистрирован: 06.04.2022

b707 пишет:

Iv_. во-первых, вставьте ссылки правильно. для этого есть отдельная кнопка в интерфейсе.

А как первое сообщение ветки отредактировать?

SAB
Offline
Зарегистрирован: 27.12.2016

Iv_ пишет:

Превосходная библиотека FabGL!

Подскажите, если вы уже разобрались с этой библиотекой, какое оптимальное разрешение выставляете для когда то массовых мониторов 17-19''

DisplayController.setResolution(VESA_720x400_85Hz, -1, -1, DOUBLEBUFFERING);

Вот это не подошло. Пробовал на двух, - превысило, мониторы не показывают с VESA_768x576_60Hz работает, но хотелось бы больше, перебирать все не хотелось бы.

На каком вы конкретно остановились?

Iv_
Iv_ аватар
Offline
Зарегистрирован: 06.04.2022

Зависит от количества памяти у esp32.
У меня на платах Devkit v1 терпимо работает разрешение 640/480 для 64 битного цвета. Если нужен ещё WiFi, падаем в 640/200. Это для ESP32 Wroom. Чем у вас больше код, тем меньше область памяти под видео, тем ниже разрешение и цветность.
Лучше использовать Wrover, особенно под эмулятор ПК.

SAB
Offline
Зарегистрирован: 27.12.2016

Спасибо за ответ. У меня нет пинов свободных, чтобы показывало 64 цвета. Я подключил только RGB H и V синхронизации. Таким образом задействую 5 пинов. Получилось идеально заменить по железу дисплей Nokia5110 в проекте. Правда цветов всего 8, но это лучше чем 2 и во много раз лучше по размеру диагонали. Для меня подошло оптимально VGA_640x240_60Hz проект с WiFi делами. Теперь заказал скалер под выбранную матрицу. Вообщем сасибо за наводку. А со шрифтами, думаю разберусь в дальнейшем. 

Iv_
Iv_ аватар
Offline
Зарегистрирован: 06.04.2022

SAB пишет:

Спасибо за ответ. У меня нет пинов свободных, чтобы показывало 64 цвета. Я подключил только RGB H и V синхронизации. Таким образом задействую 5 пинов. Получилось идеально заменить по железу дисплей Nokia5110 в проекте. Правда цветов всего 8, но это лучше чем 2 и во много раз лучше по размеру диагонали. Для меня подошло оптимально VGA_640x240_60Hz проект с WiFi делами. Теперь заказал скалер под выбранную матрицу. Вообщем сасибо за наводку. А со шрифтами, думаю разберусь в дальнейшем. 


Всегда пожалуйста. Всегда рад с коллегами поделиться. В FabGl появился ещё PAL/NTSC Color Composite видеовыход. Совсем уж для древних/кубических телевизоров. Я пытался, но пока не смог. Железа нужного под рукой не было. Esp32-cam, отказался генерировать древнючий видеосигнал.

SAB
Offline
Зарегистрирован: 27.12.2016

Ну вот и русский шрифт сделал. Правда взял самый дешманский шрифт 5х7 для эксперимента, но можно любой который есть в системе теперь брать и править.

Iv_
Iv_ аватар
Offline
Зарегистрирован: 06.04.2022

SAB - каааак???!!!
Я всё это уже делал. Шрифт font_5x7 который с библиотекой fabgl шёл?

Iv_
Iv_ аватар
Offline
Зарегистрирован: 06.04.2022

Весь вечер вчера развлекался с конвертором шрифтов на Пайтане, который внутри fabgl есть. Даже нашёл Пайтон, который под Win7 работает. Всё конвертируется, только fabgl не принимает эти шрифты.

SAB
Offline
Зарегистрирован: 27.12.2016

Я не использовал ни какие пайтоны. Просто брал уже существующий в системе (они в отдельной папке ) и рисовал сам какой символ мне нужен. Прямо в Notepad++.  Пару часов и вот результат.

 

Iv_
Iv_ аватар
Offline
Зарегистрирован: 06.04.2022

SAB, поделитесь пожалуйста имеющейся библиотекой с русским шрифтом. А то, у меня скоро уже крыша поедет на этой почве. Бегаю кругами и нифига не выходит.

Komandir
Komandir аватар
Offline
Зарегистрирован: 18.08.2018

Для шрифтов до 8 включительно шириной - каждый байт это одна строка. Если бит установлен, то точка есть. Иначе точки нет.

Для шрифтов от 9 до 16 включительно шириной - каждые два байта это одна строка. (не проверял, но сужу по размеру)

https://wokwi.com/projects/329382043718779476

Iv_
Iv_ аватар
Offline
Зарегистрирован: 06.04.2022

Iv_
Iv_ аватар
Offline
Зарегистрирован: 06.04.2022

Шрифт font_8x8.h подменил аналогичным шрифтом с кириллицей. Теперь туплю с функцией utf8rus. В моём новом шрифте заглавная А(русская часть фонта) начинается с кода 128, а должна со 192.

Komandir
Komandir аватар
Offline
Зарегистрирован: 18.08.2018

-64

Iv_
Iv_ аватар
Offline
Зарегистрирован: 06.04.2022

Уже пытался, не всё так просто.

Komandir
Komandir аватар
Offline
Зарегистрирован: 18.08.2018

Само собой с учетом диапазона...

Iv_
Iv_ аватар
Offline
Зарегистрирован: 06.04.2022

Оказалось, легче поправить фонт под стандарт.

b707
Offline
Зарегистрирован: 26.05.2017

Iv_ пишет:

Оказалось, легче поправить фонт под стандарт.

5 букв не смогли в функции отдельно прописать?

Iv_
Iv_ аватар
Offline
Зарегистрирован: 06.04.2022

b707 пишет:

Iv_ пишет:

Оказалось, легче поправить фонт под стандарт.

5 букв не смогли в функции отдельно прописать?


Я решил, что легче иметь более/менее стандартный фонт и utf8rus.
Лучше подскажите решение следующей проблемы.
Функция классическая utf8rus, у меня позволяет русифицировать не более 10 символов. Раньше такого не замечал. Возможно, корни проблемы в библиотеке FabGL.

Iv_
Iv_ аватар
Offline
Зарегистрирован: 06.04.2022

Функция классическая utf8rus на tft дисплейчиках, без проблем рисовала длинные строки.

Проблема решаемая, но код выходит корявый.

canvas.drawTextFmt(5,5,"%s%s%s%s%c%s",utf8rus("Температур"),utf8rus("а на улице"),utf8rus("  : +"),String(incData[i].d),191,"C");

Iv_
Iv_ аватар
Offline
Зарегистрирован: 06.04.2022

b707
Offline
Зарегистрирован: 26.05.2017

Iv_ пишет:

Функция классическая utf8rus на tft дисплейчиках, без проблем рисовала длинные строки.

Проблема решаемая, но код выходит корявый.

canvas.drawTextFmt(5,5,"%s%s%s%s%c%s",utf8rus("Температур"),utf8rus("а на улице"),utf8rus("  : +"),String(incData[i].d),191,"C");

покажите пример кода. где функция не работает больше чем с 10 символами.

Только, пожалуйста. код должен быть полным - такой. который можно скомпилировать и запустить

Iv_
Iv_ аватар
Offline
Зарегистрирован: 06.04.2022

b707 пишет:

Iv_ пишет:

Функция классическая utf8rus на tft дисплейчиках, без проблем рисовала длинные строки.

Проблема решаемая, но код выходит корявый.

canvas.drawTextFmt(5,5,"%s%s%s%s%c%s",utf8rus("Температур"),utf8rus("а на улице"),utf8rus("  : +"),String(incData[i].d),191,"C");

покажите пример кода. где функция не работает больше чем с 10 символами.

Только, пожалуйста. код должен быть полным - такой. который можно скомпилировать и запустить

Железяку придётся собирать. Иначе, баг проверить не получится. В принципе, в монохроме с одним цветом, четыре проводка припаять от VGA кабеля к любому ESP32, не так уж сложно. Я сегодня проверил ESP32-CAM на совместимость с FabGl, отлично всё работает.

Iv_
Iv_ аватар
Offline
Зарегистрирован: 06.04.2022

Iv_
Iv_ аватар
Offline
Зарегистрирован: 06.04.2022

Iv_
Iv_ аватар
Offline
Зарегистрирован: 06.04.2022
[code]
#include <stdio.h>
#include "fabgl.h"
fabgl::VGAController DisplayController;
fabgl::Canvas        canvas(&DisplayController);
fabgl::PS2Controller PS2Controller;
#define DOUBLEBUFFERING 1
void setup() {
// Назначаем GPIO12 для красного, GPIO13 для зеленого, GPIO15 для синего, GPIO2 для HSync и GPIO14 для VSync
DisplayController.begin(GPIO_NUM_12, GPIO_NUM_13, GPIO_NUM_15, GPIO_NUM_2, GPIO_NUM_14);
//DisplayController.setResolution(VGA_640x400_60Hz);
DisplayController.setResolution(VGA_640x240_60Hz);
//DisplayController.setResolution(VGA_640x350_70Hz);
//DisplayController.setResolution(SVGA_1280x720_60Hz);
//DisplayController.setResolution( VGA_256x384_60Hz);
canvas.selectFont(&fabgl::FONT_8x8);
canvas.clear();
canvas.setPenColor(Color::Green);
canvas.setGlyphOptions(GlyphOptions().FillBackground(false).DoubleWidth(1));
canvas.drawTextFmt(350, 10,"%s",utf8rus("АБВГДЕЖЗИК"));
canvas.drawTextFmt(350, 20,"%s",utf8rus("ЛМНОПРОСТУ"));
canvas.drawTextFmt(350, 30,"%s",utf8rus("ХФШЧЩЪЫЬЭЮ"));
canvas.drawTextFmt(350, 40,"%s","QWERTYUIOP");
canvas.drawTextFmt(350, 50,"%s","ASDFGHJKL:");
canvas.drawTextFmt(350, 60,"%s","ZXCVBNM123");
int yy=0;
for (int ii = 128; ii < 256; ii++)
  {       yy++;
    canvas.drawTextFmt(0,yy*10,"%d",ii);
    canvas.drawTextFmt(40,yy*10," - ");
    canvas.drawTextFmt(90,yy*10,"%c",ii);
  }
 yy=0;
 canvas.setPenColor(Color::Red);
for (int ii = 151; ii < 174; ii++)
  {      yy++;
    canvas.drawTextFmt(120,yy*10,"%d",ii);
    canvas.drawTextFmt(160,yy*10," - ");
    canvas.drawTextFmt(200,yy*10,"%c",ii);
  }
yy=0;
canvas.setPenColor(Color::Blue);
for (int ii = 174; ii < 256; ii++)
  {   
    yy++;
    canvas.drawTextFmt(220,yy*10,"%d",ii);
    canvas.drawTextFmt(260,yy*10," - ");
    canvas.drawTextFmt(300,yy*10,"%c",ii);
  }
}
void loop() {
}
// Начало функции обработки кириллических символов
String utf8rus(String source)
{
  int i,k;
  String target;
  unsigned char n;
  char m[2] = { '0', '\0' };
  k = source.length(); i = 0;
  while (i < k) {
    n = source[i]; i++;
    if (n >= 0xC0) {
      switch (n) {
        case 0xD0: {
          n = source[i]; i++;
          if (n == 0x81) { n = 0xA8; break; }
          if (n >= 0x90 && n <= 0xBF) n = n + 0x30;
          break;
        }
        case 0xD1: {
          n = source[i]; i++;
          if (n == 0x91) { n = 0xB8; break; }
          if (n >= 0x80 && n <= 0x8F) n = n + 0x70;
          break;
        }
      }
    }
    m[0] = n; target = target + String(m);
  }
return target;
}
// Конец функции обработки кириллических символов.
[/code]

 

Iv_
Iv_ аватар
Offline
Зарегистрирован: 06.04.2022

#pragma once


namespace fabgl {

#ifdef FABGL_FONT_INCLUDE_DEFINITION

static const uint8_t FONT_8x8_DATA[] = {

	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,	// Char 000 (.)
	0x7E, 0x81, 0xA5, 0x81, 0xBD, 0x99, 0x81, 0x7E,	// Char 001 (.)
	0x7E, 0xFF, 0xDB, 0xFF, 0xC3, 0xE7, 0xFF, 0x7E,	// Char 002 (.)
	0x6C, 0xFE, 0xFE, 0xFE, 0x7C, 0x38, 0x10, 0x00,	// Char 003 (.)
	0x10, 0x38, 0x7C, 0xFE, 0x7C, 0x38, 0x10, 0x00,	// Char 004 (.)
	0x38, 0x38, 0x38, 0xFE, 0xFE, 0xD6, 0x10, 0x38,	// Char 005 (.)
	0x10, 0x10, 0x38, 0x7C, 0xFE, 0x7C, 0x10, 0x38,	// Char 006 (.)
	0x00, 0x00, 0x18, 0x3C, 0x3C, 0x18, 0x00, 0x00,	// Char 007 (.)
	0xFF, 0xFF, 0xE7, 0xC3, 0xC3, 0xE7, 0xFF, 0xFF,	// Char 008 (.)
	0x00, 0x3C, 0x66, 0x42, 0x42, 0x66, 0x3C, 0x00,	// Char 009 (.)
	0xFF, 0xC3, 0x99, 0xBD, 0xBD, 0x99, 0xC3, 0xFF,	// Char 010 (.)
	0x0F, 0x03, 0x05, 0x7D, 0x84, 0x84, 0x84, 0x78,	// Char 011 (.)
	0x3C, 0x42, 0x42, 0x42, 0x3C, 0x18, 0x7E, 0x18,	// Char 012 (.)
	0x3F, 0x21, 0x3F, 0x20, 0x20, 0x60, 0xE0, 0xC0,	// Char 013 (.)
	0x3F, 0x21, 0x3F, 0x21, 0x23, 0x67, 0xE6, 0xC0,	// Char 014 (.)
	0x18, 0xDB, 0x3C, 0xE7, 0xE7, 0x3C, 0xDB, 0x18,	// Char 015 (.)
	0x80, 0xE0, 0xF8, 0xFE, 0xF8, 0xE0, 0x80, 0x00,	// Char 016 (.)
	0x02, 0x0E, 0x3E, 0xFE, 0x3E, 0x0E, 0x02, 0x00,	// Char 017 (.)
	0x18, 0x3C, 0x7E, 0x18, 0x18, 0x7E, 0x3C, 0x18,	// Char 018 (.)
	0x24, 0x24, 0x24, 0x24, 0x24, 0x00, 0x24, 0x00,	// Char 019 (.)
	0x7F, 0x92, 0x92, 0x72, 0x12, 0x12, 0x12, 0x00,	// Char 020 (.)
	0x3E, 0x63, 0x38, 0x44, 0x44, 0x38, 0xCC, 0x78,	// Char 021 (.)
	0x00, 0x00, 0x00, 0x00, 0x7E, 0x7E, 0x7E, 0x00,	// Char 022 (.)
	0x18, 0x3C, 0x7E, 0x18, 0x7E, 0x3C, 0x18, 0xFF,	// Char 023 (.)
	0x10, 0x38, 0x7C, 0x54, 0x10, 0x10, 0x10, 0x00,	// Char 024 (.)
	0x10, 0x10, 0x10, 0x54, 0x7C, 0x38, 0x10, 0x00,	// Char 025 (.)
	0x00, 0x18, 0x0C, 0xFE, 0x0C, 0x18, 0x00, 0x00,	// Char 026 (.)
	0x00, 0x30, 0x60, 0xFE, 0x60, 0x30, 0x00, 0x00,	// Char 027 (.)
	0x00, 0x00, 0x40, 0x40, 0x40, 0x7E, 0x00, 0x00,	// Char 028 (.)
	0x00, 0x24, 0x66, 0xFF, 0x66, 0x24, 0x00, 0x00,	// Char 029 (.)
	0x00, 0x10, 0x38, 0x7C, 0xFE, 0xFE, 0x00, 0x00,	// Char 030 (.)
	0x00, 0xFE, 0xFE, 0x7C, 0x38, 0x10, 0x00, 0x00,	// Char 031 (.)
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,	// Char 032 ( )
	0x10, 0x10, 0x10, 0x10, 0x10, 0x00, 0x10, 0x00,	// Char 033 (!)
	0x24, 0x24, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00,	// Char 034 (")
	0x24, 0x24, 0x7E, 0x24, 0x7E, 0x24, 0x24, 0x00,	// Char 035 (#)
	0x18, 0x3E, 0x40, 0x3C, 0x02, 0x7C, 0x18, 0x00,	// Char 036 ($)
	0x00, 0x62, 0x64, 0x08, 0x10, 0x26, 0x46, 0x00,	// Char 037 (%)
	0x30, 0x48, 0x30, 0x56, 0x88, 0x88, 0x76, 0x00,	// Char 038 (&)
	0x10, 0x10, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00,	// Char 039 (')
	0x10, 0x20, 0x40, 0x40, 0x40, 0x20, 0x10, 0x00,	// Char 040 (()
	0x20, 0x10, 0x08, 0x08, 0x08, 0x10, 0x20, 0x00,	// Char 041 ())
	0x00, 0x10, 0x10, 0xFE, 0x28, 0x44, 0x00, 0x00,	// Char 042 (*)
	0x00, 0x10, 0x10, 0x7C, 0x10, 0x10, 0x00, 0x00,	// Char 043 (+)
	0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x20,	// Char 044 (,)
	0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x00,	// Char 045 (-)
	0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x00,	// Char 046 (.)
	0x00, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x00,	// Char 047 (/)
	0x3C, 0x42, 0x46, 0x4A, 0x52, 0x62, 0x3C, 0x00,	// Char 048 (0)
	0x10, 0x30, 0x50, 0x10, 0x10, 0x10, 0x7C, 0x00,	// Char 049 (1)
	0x3C, 0x42, 0x02, 0x0C, 0x30, 0x42, 0x7E, 0x00,	// Char 050 (2)
	0x3C, 0x42, 0x02, 0x1C, 0x02, 0x42, 0x3C, 0x00,	// Char 051 (3)
	0x08, 0x18, 0x28, 0x48, 0xFE, 0x08, 0x1C, 0x00,	// Char 052 (4)
	0x7E, 0x40, 0x7C, 0x02, 0x02, 0x42, 0x3C, 0x00,	// Char 053 (5)
	0x1C, 0x20, 0x40, 0x7C, 0x42, 0x42, 0x3C, 0x00,	// Char 054 (6)
	0x7E, 0x42, 0x04, 0x08, 0x10, 0x10, 0x10, 0x00,	// Char 055 (7)
	0x3C, 0x42, 0x42, 0x3C, 0x42, 0x42, 0x3C, 0x00,	// Char 056 (8)
	0x3C, 0x42, 0x42, 0x3E, 0x02, 0x04, 0x38, 0x00,	// Char 057 (9)
	0x00, 0x10, 0x10, 0x00, 0x00, 0x10, 0x10, 0x00,	// Char 058 (:)
	0x00, 0x10, 0x10, 0x00, 0x00, 0x10, 0x10, 0x20,	// Char 059 (;)
	0x08, 0x10, 0x20, 0x40, 0x20, 0x10, 0x08, 0x00,	// Char 060 (<)
	0x00, 0x00, 0x7E, 0x00, 0x00, 0x7E, 0x00, 0x00,	// Char 061 (=)
	0x10, 0x08, 0x04, 0x02, 0x04, 0x08, 0x10, 0x00,	// Char 062 (>)
	0x3C, 0x42, 0x02, 0x04, 0x08, 0x00, 0x08, 0x00,	// Char 063 (?)
	0x3C, 0x42, 0x5E, 0x52, 0x5E, 0x40, 0x3C, 0x00,	// Char 064 (@)
	0x18, 0x24, 0x42, 0x42, 0x7E, 0x42, 0x42, 0x00,	// Char 065 (A)
	0x7C, 0x22, 0x22, 0x3C, 0x22, 0x22, 0x7C, 0x00,	// Char 066 (B)
	0x1C, 0x22, 0x40, 0x40, 0x40, 0x22, 0x1C, 0x00,	// Char 067 (C)
	0x78, 0x24, 0x22, 0x22, 0x22, 0x24, 0x78, 0x00,	// Char 068 (D)
	0x7E, 0x22, 0x28, 0x38, 0x28, 0x22, 0x7E, 0x00,	// Char 069 (E)
	0x7E, 0x22, 0x28, 0x38, 0x28, 0x20, 0x70, 0x00,	// Char 070 (F)
	0x1C, 0x22, 0x40, 0x40, 0x4E, 0x22, 0x1E, 0x00,	// Char 071 (G)
	0x42, 0x42, 0x42, 0x7E, 0x42, 0x42, 0x42, 0x00,	// Char 072 (H)
	0x38, 0x10, 0x10, 0x10, 0x10, 0x10, 0x38, 0x00,	// Char 073 (I)
	0x0E, 0x04, 0x04, 0x04, 0x44, 0x44, 0x38, 0x00,	// Char 074 (J)
	0x62, 0x24, 0x28, 0x30, 0x28, 0x24, 0x63, 0x00,	// Char 075 (K)
	0x70, 0x20, 0x20, 0x20, 0x20, 0x22, 0x7E, 0x00,	// Char 076 (L)
	0x63, 0x55, 0x49, 0x41, 0x41, 0x41, 0x41, 0x00,	// Char 077 (M)
	0x62, 0x52, 0x4A, 0x46, 0x42, 0x42, 0x42, 0x00,	// Char 078 (N)
	0x3C, 0x42, 0x42, 0x42, 0x42, 0x42, 0x3C, 0x00,	// Char 079 (O)
	0x7C, 0x22, 0x22, 0x3C, 0x20, 0x20, 0x70, 0x00,	// Char 080 (P)
	0x3C, 0x42, 0x42, 0x42, 0x4A, 0x3C, 0x03, 0x00,	// Char 081 (Q)
	0x7C, 0x22, 0x22, 0x3C, 0x28, 0x24, 0x72, 0x00,	// Char 082 (R)
	0x3C, 0x42, 0x40, 0x3C, 0x02, 0x42, 0x3C, 0x00,	// Char 083 (S)
	0x7F, 0x49, 0x08, 0x08, 0x08, 0x08, 0x1C, 0x00,	// Char 084 (T)
	0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x3C, 0x00,	// Char 085 (U)
	0x41, 0x41, 0x41, 0x41, 0x22, 0x14, 0x08, 0x00,	// Char 086 (V)
	0x41, 0x41, 0x41, 0x49, 0x49, 0x49, 0x36, 0x00,	// Char 087 (W)
	0x41, 0x22, 0x14, 0x08, 0x14, 0x22, 0x41, 0x00,	// Char 088 (X)
	0x41, 0x22, 0x14, 0x08, 0x08, 0x08, 0x1C, 0x00,	// Char 089 (Y)
	0x7F, 0x42, 0x04, 0x08, 0x10, 0x21, 0x7F, 0x00,	// Char 090 (Z)
	0x78, 0x40, 0x40, 0x40, 0x40, 0x40, 0x78, 0x00,	// Char 091 ([)
	0x80, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x00,	// Char 092 (\)
	0x78, 0x08, 0x08, 0x08, 0x08, 0x08, 0x78, 0x00,	// Char 093 (])
	0x10, 0x28, 0x44, 0x82, 0x00, 0x00, 0x00, 0x00,	// Char 094 (^)
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF,	// Char 095 (_)
	0x10, 0x10, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00,	// Char 096 (`)
	0x00, 0x00, 0x3C, 0x02, 0x3E, 0x42, 0x3F, 0x00,	// Char 097 (a)
	0x60, 0x20, 0x20, 0x2E, 0x31, 0x31, 0x2E, 0x00,	// Char 098 (b)
	0x00, 0x00, 0x3C, 0x42, 0x40, 0x42, 0x3C, 0x00,	// Char 099 (c)
	0x06, 0x02, 0x02, 0x3A, 0x46, 0x46, 0x3B, 0x00,	// Char 100 (d)
	0x00, 0x00, 0x3C, 0x42, 0x7E, 0x40, 0x3C, 0x00,	// Char 101 (e)
	0x0C, 0x12, 0x10, 0x38, 0x10, 0x10, 0x38, 0x00,	// Char 102 (f)
	0x00, 0x00, 0x3D, 0x42, 0x42, 0x3E, 0x02, 0x7C,	// Char 103 (g)
	0x60, 0x20, 0x2C, 0x32, 0x22, 0x22, 0x62, 0x00,	// Char 104 (h)
	0x10, 0x00, 0x30, 0x10, 0x10, 0x10, 0x38, 0x00,	// Char 105 (i)
	0x02, 0x00, 0x06, 0x02, 0x02, 0x42, 0x42, 0x3C,	// Char 106 (j)
	0x60, 0x20, 0x24, 0x28, 0x30, 0x28, 0x26, 0x00,	// Char 107 (k)
	0x30, 0x10, 0x10, 0x10, 0x10, 0x10, 0x38, 0x00,	// Char 108 (l)
	0x00, 0x00, 0x76, 0x49, 0x49, 0x49, 0x49, 0x00,	// Char 109 (m)
	0x00, 0x00, 0x5C, 0x62, 0x42, 0x42, 0x42, 0x00,	// Char 110 (n)
	0x00, 0x00, 0x3C, 0x42, 0x42, 0x42, 0x3C, 0x00,	// Char 111 (o)
	0x00, 0x00, 0x5C, 0x22, 0x22, 0x3C, 0x20, 0x70,	// Char 112 (p)
	0x00, 0x00, 0x3A, 0x44, 0x44, 0x3C, 0x04, 0x0E,	// Char 113 (q)
	0x00, 0x00, 0x6C, 0x32, 0x22, 0x20, 0x70, 0x00,	// Char 114 (r)
	0x00, 0x00, 0x3E, 0x40, 0x3C, 0x02, 0x7C, 0x00,	// Char 115 (s)
	0x10, 0x10, 0x7C, 0x10, 0x10, 0x12, 0x0C, 0x00,	// Char 116 (t)
	0x00, 0x00, 0x42, 0x42, 0x42, 0x46, 0x3A, 0x00,	// Char 117 (u)
	0x00, 0x00, 0x41, 0x41, 0x22, 0x14, 0x08, 0x00,	// Char 118 (v)
	0x00, 0x00, 0x41, 0x49, 0x49, 0x49, 0x36, 0x00,	// Char 119 (w)
	0x00, 0x00, 0x44, 0x28, 0x10, 0x28, 0x44, 0x00,	// Char 120 (x)
	0x00, 0x00, 0x42, 0x42, 0x42, 0x3E, 0x02, 0x7C,	// Char 121 (y)
	0x00, 0x00, 0x7C, 0x08, 0x10, 0x20, 0x7C, 0x00,	// Char 122 (z)
	0x0C, 0x10, 0x10, 0x60, 0x10, 0x10, 0x0C, 0x00,	// Char 123 ({)
	0x10, 0x10, 0x10, 0x00, 0x10, 0x10, 0x10, 0x00,	// Char 124 (|)
	0x30, 0x08, 0x08, 0x06, 0x08, 0x08, 0x30, 0x00,	// Char 125 (})
	0x32, 0x4C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,	// Char 126 (~)
	0x00, 0x08, 0x14, 0x22, 0x41, 0x41, 0x7F, 0x00,	// Char 127 (.)
	0x1E, 0x22, 0x42, 0x42, 0x7E, 0x42, 0x42, 0x00,	// Char 128 (.)
	0x7C, 0x40, 0x40, 0x7C, 0x42, 0x42, 0x7C, 0x00,	// Char 129 (.)
	0x7C, 0x42, 0x42, 0x7C, 0x42, 0x42, 0x7C, 0x00,	// Char 130 (.)
	0x7E, 0x42, 0x40, 0x40, 0x40, 0x40, 0x40, 0x00,	// Char 131 (.)
	0x0E, 0x12, 0x22, 0x22, 0x22, 0x22, 0x7F, 0x41,	// Char 132 (.)
	0x7E, 0x42, 0x48, 0x78, 0x48, 0x42, 0x7E, 0x00,	// Char 133 (.)
	0x49, 0x49, 0x2A, 0x1C, 0x2A, 0x49, 0x49, 0x00,	// Char 134 (.)
	0x3C, 0x42, 0x02, 0x0C, 0x02, 0x42, 0x3C, 0x00,	// Char 135 (.)
	0x42, 0x42, 0x46, 0x4A, 0x52, 0x62, 0x42, 0x00,	// Char 136 (.)
	0x5A, 0x42, 0x46, 0x4A, 0x52, 0x62, 0x42, 0x00,	// Char 137 (.)
	0x42, 0x44, 0x48, 0x78, 0x44, 0x42, 0x42, 0x00,	// Char 138 (.)
	0x1E, 0x22, 0x42, 0x42, 0x42, 0x42, 0x42, 0x00,	// Char 139 (.)
	0x41, 0x63, 0x55, 0x49, 0x41, 0x41, 0x41, 0x00,	// Char 140 (.)
	0x42, 0x42, 0x42, 0x42, 0x7E, 0x42, 0x42, 0x00,	// Char 141 (.)
	0x3C, 0x42, 0x42, 0x42, 0x42, 0x42, 0x3C, 0x00,	// Char 142 (.)
	0x7E, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x00,	// Char 143 (.)
	0x7C, 0x42, 0x42, 0x42, 0x7C, 0x40, 0x40, 0x00,	// Char 144 (.)
	0x3C, 0x42, 0x40, 0x40, 0x40, 0x42, 0x3C, 0x00,	// Char 145 (.)
	0x7F, 0x49, 0x08, 0x08, 0x08, 0x08, 0x08, 0x00,	// Char 146 (.)
	0x42, 0x42, 0x42, 0x3E, 0x02, 0x02, 0x3C, 0x00,	// Char 147 (.)
	0x3E, 0x49, 0x49, 0x49, 0x3E, 0x08, 0x08, 0x00,	// Char 148 (.)
	0x42, 0x42, 0x24, 0x18, 0x24, 0x42, 0x42, 0x00,	// Char 149 (.)
	0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x7F, 0x01,	// Char 150 (.)
	0x42, 0x42, 0x42, 0x42, 0x3E, 0x02, 0x02, 0x00,	// Char 151 (.)
	0x41, 0x41, 0x49, 0x49, 0x49, 0x49, 0x7F, 0x00,	// Char 152 (.)
	0x82, 0x82, 0x92, 0x92, 0x92, 0x92, 0xFF, 0x01,	// Char 153 (.)
	0x70, 0x50, 0x10, 0x1C, 0x12, 0x12, 0x1C, 0x00,	// Char 154 (.)
	0x41, 0x41, 0x41, 0x79, 0x45, 0x45, 0x79, 0x00,	// Char 155 (.)
	0x20, 0x20, 0x20, 0x3C, 0x22, 0x22, 0x3C, 0x00,	// Char 156 (.)
	0x3C, 0x42, 0x02, 0x3E, 0x02, 0x42, 0x3C, 0x00,	// Char 157 (.)
	0x4E, 0x51, 0x51, 0x71, 0x51, 0x51, 0x4E, 0x00,	// Char 158 (.)
	0x3E, 0x42, 0x42, 0x42, 0x3E, 0x22, 0x42, 0x00,	// Char 159 (.)
	0x00, 0x00, 0x38, 0x04, 0x3C, 0x44, 0x3A, 0x00,	// Char 160 (.)
	0x00, 0x00, 0x78, 0x40, 0x78, 0x44, 0x78, 0x00,	// Char 161 (.)
	0x00, 0x00, 0x78, 0x44, 0x78, 0x44, 0x78, 0x00,	// Char 162 (.)
	0x00, 0x00, 0x7C, 0x40, 0x40, 0x40, 0x40, 0x00,	// Char 163 (.)
	0x38, 0x04, 0x3C, 0x44, 0x44, 0x44, 0x38, 0x00,	// Char 164 (.)
	0x00, 0x00, 0x38, 0x44, 0x7C, 0x40, 0x38, 0x00,	// Char 165 (.)
	0x00, 0x00, 0x54, 0x54, 0x38, 0x54, 0x54, 0x00,	// Char 166 (.)
	0x00, 0x00, 0x38, 0x44, 0x18, 0x44, 0x38, 0x00,	// Char 167 (.)
	0x00, 0x00, 0x44, 0x44, 0x44, 0x44, 0x3A, 0x00,	// Char 168 (.)
	0x10, 0x00, 0x44, 0x44, 0x44, 0x44, 0x3A, 0x00,	// Char 169 (.)
	0x00, 0x00, 0x44, 0x48, 0x70, 0x48, 0x44, 0x00,	// Char 170 (.)
	0x00, 0x00, 0x04, 0x0C, 0x14, 0x24, 0x44, 0x00,	// Char 171 (.)
	0x00, 0x00, 0x41, 0x63, 0x55, 0x49, 0x41, 0x00,	// Char 172 (.)
	0x00, 0x00, 0x44, 0x44, 0x7C, 0x44, 0x44, 0x00,	// Char 173 (.)
	0x00, 0x00, 0x38, 0x44, 0x44, 0x44, 0x38, 0x00,	// Char 174 (.)
	0x00, 0x00, 0x7C, 0x44, 0x44, 0x44, 0x44, 0x00,	// Char 175 (.)
	0x22, 0x88, 0x22, 0x88, 0x22, 0x88, 0x22, 0x88,	// Char 176 (.)
	0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA,	// Char 177 (.)
	0xDB, 0x77, 0xDB, 0xEE, 0xDB, 0x77, 0xDB, 0xEE,	// Char 178 (.)
	0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,	// Char 179 (.)
	0x18, 0x18, 0x18, 0xF8, 0xF8, 0x18, 0x18, 0x18,	// Char 180 (.)
	0x18, 0x18, 0xF8, 0x18, 0xF8, 0x18, 0x18, 0x18,	// Char 181 (.)
	0x14, 0x14, 0x14, 0xF4, 0xF4, 0x14, 0x14, 0x14,	// Char 182 (.)
	0x00, 0x00, 0x00, 0xFC, 0xF4, 0x14, 0x14, 0x14,	// Char 183 (.)
	0x00, 0x00, 0xF8, 0x08, 0xF8, 0x18, 0x18, 0x18,	// Char 184 (.)
	0x14, 0x14, 0xF4, 0x04, 0xF4, 0x14, 0x14, 0x14,	// Char 185 (.)
	0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14,	// Char 186 (.)
	0x00, 0x00, 0xFC, 0x04, 0xF4, 0x14, 0x14, 0x14,	// Char 187 (.)
	0x14, 0x14, 0xF4, 0x04, 0xFC, 0x00, 0x00, 0x00,	// Char 188 (.)
	0x14, 0x14, 0x14, 0xF4, 0xFC, 0x00, 0x00, 0x00,	// Char 189 (.)
	0x18, 0x18, 0xF8, 0x08, 0xF8, 0x00, 0x00, 0x00,	// Char 190 (.)
	0x06, 0x09, 0x09, 0x06, 0x00, 0x00, 0x00, 0x00,	// Char 191 (.)
	0x1E, 0x22, 0x42, 0x42, 0x7E, 0x42, 0x42, 0x00,	// Char 192 (.)
	0x7C, 0x40, 0x40, 0x7C, 0x42, 0x42, 0x7C, 0x00,	// Char 193 (.)
	0x7C, 0x42, 0x42, 0x7C, 0x42, 0x42, 0x7C, 0x00,	// Char 194 (.)
	0x7E, 0x42, 0x40, 0x40, 0x40, 0x40, 0x40, 0x00,	// Char 195 (.)
	0x0E, 0x12, 0x22, 0x22, 0x22, 0x22, 0x7F, 0x41,	// Char 196 (.)
	0x7E, 0x42, 0x48, 0x78, 0x48, 0x42, 0x7E, 0x00,	// Char 197 (.)
	0x49, 0x49, 0x2A, 0x1C, 0x2A, 0x49, 0x49, 0x00,	// Char 198 (.)
	0x3C, 0x42, 0x02, 0x0C, 0x02, 0x42, 0x3C, 0x00,	// Char 199 (.)
	0x42, 0x42, 0x46, 0x4A, 0x52, 0x62, 0x42, 0x00,	// Char 200 (.)
	0x5A, 0x42, 0x46, 0x4A, 0x52, 0x62, 0x42, 0x00,	// Char 201 (.)
	0x42, 0x44, 0x48, 0x78, 0x44, 0x42, 0x42, 0x00,	// Char 202 (.)
	0x1E, 0x22, 0x42, 0x42, 0x42, 0x42, 0x42, 0x00,	// Char 203 (.)
	0x41, 0x63, 0x55, 0x49, 0x41, 0x41, 0x41, 0x00,	// Char 204 (.)
	0x42, 0x42, 0x42, 0x42, 0x7E, 0x42, 0x42, 0x00,	// Char 205 (.)
	0x3C, 0x42, 0x42, 0x42, 0x42, 0x42, 0x3C, 0x00,	// Char 206 (.)
	0x7E, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x00,	// Char 207 (.)
	0x7C, 0x42, 0x42, 0x42, 0x7C, 0x40, 0x40, 0x00,	// Char 208 (.)
	0x3C, 0x42, 0x40, 0x40, 0x40, 0x42, 0x3C, 0x00,	// Char 209 (.)
	0x7F, 0x49, 0x08, 0x08, 0x08, 0x08, 0x08, 0x00,	// Char 210 (.)
	0x42, 0x42, 0x42, 0x3E, 0x02, 0x02, 0x3C, 0x00,	// Char 211 (.)
	0x3E, 0x49, 0x49, 0x49, 0x3E, 0x08, 0x08, 0x00,	// Char 212 (.)
	0x42, 0x42, 0x24, 0x18, 0x24, 0x42, 0x42, 0x00,	// Char 213 (.)
	0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x7F, 0x01,	// Char 214 (.)
	0x42, 0x42, 0x42, 0x42, 0x3E, 0x02, 0x02, 0x00,	// Char 215 (.)
	0x41, 0x41, 0x49, 0x49, 0x49, 0x49, 0x7F, 0x00,	// Char 216 (.)
	0x82, 0x82, 0x92, 0x92, 0x92, 0x92, 0xFF, 0x01,	// Char 217 (.)
	0x70, 0x50, 0x10, 0x1C, 0x12, 0x12, 0x1C, 0x00,	// Char 218 (.)
	0x41, 0x41, 0x41, 0x79, 0x45, 0x45, 0x79, 0x00,	// Char 219 (.)
	0x20, 0x20, 0x20, 0x3C, 0x22, 0x22, 0x3C, 0x00,	// Char 220 (.)
	0x3C, 0x42, 0x02, 0x3E, 0x02, 0x42, 0x3C, 0x00,	// Char 221 (.)
	0x4E, 0x51, 0x51, 0x71, 0x51, 0x51, 0x4E, 0x00,	// Char 222 (.)
	0x3E, 0x42, 0x42, 0x42, 0x3E, 0x22, 0x42, 0x00,	// Char 223 (.)
	0x00, 0x00, 0x38, 0x04, 0x3C, 0x44, 0x3A, 0x00,	// Char 224 (.)
	0x00, 0x00, 0x78, 0x40, 0x78, 0x44, 0x78, 0x00,	// Char 225 (.)
	0x00, 0x00, 0x78, 0x44, 0x78, 0x44, 0x78, 0x00,	// Char 226 (.)
	0x00, 0x00, 0x7C, 0x40, 0x40, 0x40, 0x40, 0x00,	// Char 227 (.)
	0x38, 0x04, 0x3C, 0x44, 0x44, 0x44, 0x38, 0x00,	// Char 228 (.)
	0x00, 0x00, 0x38, 0x44, 0x7C, 0x40, 0x38, 0x00,	// Char 229 (.)
	0x00, 0x00, 0x54, 0x54, 0x38, 0x54, 0x54, 0x00,	// Char 230 (.)
	0x00, 0x00, 0x38, 0x44, 0x18, 0x44, 0x38, 0x00,	// Char 231 (.)
	0x00, 0x00, 0x44, 0x44, 0x44, 0x44, 0x3A, 0x00,	// Char 232 (.)
	0x10, 0x00, 0x44, 0x44, 0x44, 0x44, 0x3A, 0x00,	// Char 233 (.)
	0x00, 0x00, 0x44, 0x48, 0x70, 0x48, 0x44, 0x00,	// Char 234 (.)
	0x00, 0x00, 0x04, 0x0C, 0x14, 0x24, 0x44, 0x00,	// Char 235 (.)
	0x00, 0x00, 0x41, 0x63, 0x55, 0x49, 0x41, 0x00,	// Char 236 (.)
	0x00, 0x00, 0x44, 0x44, 0x7C, 0x44, 0x44, 0x00,	// Char 237 (.)
	0x00, 0x00, 0x38, 0x44, 0x44, 0x44, 0x38, 0x00,	// Char 238 (.)
	0x00, 0x00, 0x7C, 0x44, 0x44, 0x44, 0x44, 0x00,	// Char 239 (.)
	0x00, 0x00, 0x78, 0x44, 0x44, 0x78, 0x40, 0x40,	// Char 240 (.)
	0x00, 0x00, 0x38, 0x44, 0x40, 0x44, 0x38, 0x00,	// Char 241 (.)
	0x00, 0x00, 0x7C, 0x54, 0x10, 0x10, 0x10, 0x00,	// Char 242 (.)
	0x00, 0x00, 0x44, 0x44, 0x3C, 0x04, 0x38, 0x00,	// Char 243 (.)
	0x00, 0x10, 0x38, 0x54, 0x54, 0x38, 0x10, 0x10,	// Char 244 (.)
	0x00, 0x00, 0x44, 0x28, 0x10, 0x28, 0x44, 0x00,	// Char 245 (.)
	0x00, 0x00, 0x44, 0x44, 0x44, 0x44, 0x7E, 0x02,	// Char 246 (.)
	0x00, 0x00, 0x44, 0x44, 0x3C, 0x04, 0x04, 0x00,	// Char 247 (.)
	0x00, 0x00, 0x44, 0x44, 0x54, 0x54, 0x7C, 0x00,	// Char 248 (.)
	0x00, 0x00, 0x44, 0x44, 0x54, 0x54, 0x7E, 0x02,	// Char 249 (.)
	0x00, 0x00, 0x70, 0x50, 0x1C, 0x12, 0x1C, 0x00,	// Char 250 (.)
	0x00, 0x00, 0x42, 0x42, 0x72, 0x4A, 0x72, 0x00,	// Char 251 (.)
	0x00, 0x00, 0x40, 0x40, 0x78, 0x44, 0x78, 0x00,	// Char 252 (.)
	0x00, 0x00, 0x38, 0x44, 0x1C, 0x44, 0x38, 0x00,	// Char 253 (.)
	0x00, 0x00, 0x4C, 0x52, 0x72, 0x52, 0x4C, 0x00,	// Char 254 (.)
	0x00, 0x00, 0x3C, 0x44, 0x3C, 0x24, 0x44, 0x00	// Char 255 (.)
};

extern const FontInfo FONT_8x8 = {
  .pointSize = 6,
  .width     = 8,
  .height    = 8,
  .ascent    = 7,
  .inleading = 0,
  .exleading = 0,
  .flags     = 0,
  .weight    = 400,
  .charset   = 255,
  .data      = FONT_8x8_DATA,
  .chptr     = nullptr,
  .codepage  = 437,
};

#else

extern const FontInfo FONT_8x8;

#endif

}

 

Iv_
Iv_ аватар
Offline
Зарегистрирован: 06.04.2022

Фонт font_8x8.h из FabGL, нужно заменить содержание файла на то что постом выше.

Iv_
Iv_ аватар
Offline
Зарегистрирован: 06.04.2022

Для ESP32-CAM компилируем и заливаем код как для Wrover Module.

b707
Offline
Зарегистрирован: 26.05.2017

что-то не нашел в вашем коде строчек длиннее 10 символов

Если у вас не так много памяти - не совсем понял нафига писать функцию utfrus через String

b707
Offline
Зарегистрирован: 26.05.2017

Iv_ пишет:

Железяку придётся собирать. Иначе, баг проверить не получится.

ерунда.

вы утверждаете, что баг в utf8rus, которая не работает более чем с 10 символами? Чтобы проверить это, никакие железяки собирать не надо.

Все что нужно - это передать utf8rus строчку длинее 10 символов и прочитать ответ. Для этого достаточно монитора порта.

sadman41
Offline
Зарегистрирован: 19.10.2016

Это чего получается - на старый аналоговый ЖК монитор через три резистора и D-SUB могу ESP-шку прицепить?

Iv_
Iv_ аватар
Offline
Зарегистрирован: 06.04.2022

Если 8 цветов хватит, так и есть. Если надо 64 цвета, надо уже 6 резисторов. :)

SAB
Offline
Зарегистрирован: 27.12.2016

Тоже удивился 10 символам, но потом понизил разрешение и стало нормально. Вообщем памяти не хватает. 

b707
Offline
Зарегистрирован: 26.05.2017

SAB пишет:

Вообщем памяти не хватает. 

если вот так вот символы прибавлять - никакой памяти не хватит :)

m[0] = n; target = target + String(m);

 

Iv_
Iv_ аватар
Offline
Зарегистрирован: 06.04.2022

SAB пишет:

Тоже удивился 10 символам, но потом понизил разрешение и стало нормально. Вообщем памяти не хватает. 

Нет, дело не в количестве свободной памяти. Значительно снизил разрешение, один фиг - баги...

//DisplayController.setResolution(VGA_640x240_60Hz);
DisplayController.setResolution(VGA_320x200_70Hz);
Думаю, именно стринговое преобразование через функцию utf8rus в drawTextFmt глючит. Для drawTextFmt, вообще тип данных char нужен, а мы преобразуем string через utf8rus.
Iv_
Iv_ аватар
Offline
Зарегистрирован: 06.04.2022

Проблема решена.

canvas.drawTextFmt(5,25,utf8rus1("Температура в квартире: Нет Данных."));

b707
Offline
Зарегистрирован: 26.05.2017

Iv_ пишет:

Проблема решена.

и? в чем ошибка была?

Iv_
Iv_ аватар
Offline
Зарегистрирован: 06.04.2022

Проблема была в двойном преобразовании типа данных. Сначала в стринг, потом из стринга в чар.

Вот эта всем давно известная функция, работает с FabGl корректно.

#define maxString 40
char target[maxString + 1] = "";
char *utf8rus(char *source)
{
  int i,j,k;
  unsigned char n;
  char m[2] = { '0', '\0' };
  strcpy(target, ""); k = strlen(source); i = j = 0;
  while (i < k) {
    n = source[i]; i++;
    if (n >= 0xC0) {
      switch (n) {
        case 0xD0: {
          n = source[i]; i++;
          if (n == 0x81) { n = 0xA8; break; }
          if (n >= 0x90 && n <= 0xBF) n = n + 0x30;
          break;
        }
        case 0xD1: {
          n = source[i]; i++;
          if (n == 0x91) { n = 0xB8; break; }
          if (n >= 0x80 && n <= 0x8F) n = n + 0x70;
          break;
        }
      }
    }
    m[0] = n; strcat(target, m);
    j++; if (j >= maxString) break;
  }
  return target;
}

 

b707
Offline
Зарегистрирован: 26.05.2017

касательно функции utf2rus

зачем вот эта конструкция... сначала превращаем символ в промежуточную строку, потом используем strcat() ??? - зачем??

unsigned char n;
 char m[2] = { '0', '\0' };
....
m[0] = n; strcat(target, m);

что мешает сделать так?

target[j] = n;

только не забудьте в конце процедуры добавить в строчку терминатор. ОДИН РАЗ.

 

И еще - проверка в строке 28 написана с ошибкой, к моменту как она сработает, вы уже вылезете за границу массива. Не говоря уж о том, что при переполнении строки вы просто отдаете ее пользователю вместо генерации ошибки...

 

DarkGenius
Offline
Зарегистрирован: 09.07.2015

Кому нужны шрифты, обращайтесь. Но имейте в виду на 4м2м есп32, это дело не взлетит.

smalever
Offline
Зарегистрирован: 26.05.2017

Привет. выложи плз файлы шрифтов, думаю что не только мне понадобится.