عرض خط truetype لأردوينو
اقرأ truetype (.ttf) من FS (على سبيل المثال. sd/spiffs/fatfs) وكتابة الإطار.
- اقرأ ملفات truetype ('cmap' format4).
- اكتب أي سلسلة إلى FrameBuffer للمستخدم.
- يدعم "الحروف الرمزية البسيطة" وجزء من "الحروف المركبة المركبة".
- ضبط حجم الخط ، الموضع ، اللون ، التباعد ، تدوير.
- تركزت الأوتار المحاذاة اليمنى. عن طريق الحصول على طول السلسلة.
- اقرأ جدول "Kern" (Format0) و Kerning.
- ترتيب الشخصيات بشكل جميل بناءً على جدول "HMTX".

دليل مرجع Truetype ™
https://developer.apple.com/fonts/truetype-reference-manual/
المكتبة الأصلية لـ STM32 موجودة هنا.
الرمز القياسي
//TrueType class declaration
truetypeClass truetype = truetypeClass();
uint8_t *framebuffer;
void setup() {
//Prepare a frame buffer
framebuffer = (uint8_t *)calloc(sizeof(uint8_t), FRAMEBUFFER_SIZE);
//Read TrueType file
//Example in SPIFFS
//I think that SD, FATFS and other codes will be almost the same
SPIFFS.begin(true);
File fontFile = SPIFFS.open("/FONTFILE.ttf", "r");
//Set framebuffer array in TrueType class
//Pay attention to the format of the framebuffer
truetype.setFramebuffer(DISPLAY_WIDTH, DISPLAY_HEIGHT, 4, 0, framebuffer);
//Initial reading of ttf files
if (!truetype.setTtfFile(fontFile)) {
Serial.println("read ttf failed");
return;
}
//TrueType class string parameter settings
truetype.setCharacterSize(100);
truetype.setCharacterSpacing(0);
truetype.setTextBoundary(10, DISPLAY_WIDTH, DISPLAY_HEIGHT);
truetype.setTextColor(0x00, 0x00);
//Write a string to the framebuffer
truetype.textDraw(10, 10, "The quick brown fox jumps over the lazy dog");
//Export framebuffer to screen
FLASH_TO_SCREEN();
//end
truetype.end();
}
API
uint8_t setttffile (ملف _file ، uint8_t _checkchecksum = 0) ؛
- اضبط ملف TTF قراءة من SD ، spiffs ، fatfs ، إلخ.
- ملف _file: ملف TTF.
- العودة: 1 = اقرأ ناجحة ، 0 = فشل القراءة.
void setFrameBuffer (uint16_t _frameBufferWidth ، uint16_t _frameBufferheight ، uint16_t _framebuffer_bit ، uint8_t _frameBufferDirection ، uint8_t *_frameBuffer) ؛
- إعدادات FrameBuffer.
- uint16_t _frameBufferWidth: عرض FrameBuffer.
- uint16_t _frameBufferheight: FrameBuffer ثمانية.
- uint16_t _frameBuffer_bit: عدد البتات لكل بكسل. (تم تنفيذ 1،4،8bit)
- uint8_t _frameBufferDirection: اتجاه بت.
- uint8_t *_frameBuffer: مؤشر FrameBuffer.
- إذا كنت تريد أن تتوافق مع FrameBuffer الخاص بك ، فقم بتحرير وظيفة AddPixel. إذا قمت بإضافة رمز ، يرجى مشاركته!
void setCharCterspacing (int16_t _characterspace ، uint8_t _kerning = 1) ؛
- تحديد العرض بين الأحرف.
- int16_t _characterspace: قيمة العرض بين الأحرف.
- UINT8_T _KERNGE: اقرأ واستخدم جدول TTF "Kern". 1: "كيرن" + _characterspace. 0: _characterspace.
void setCharCtersize (uint16_t _charactersize) ؛
- إعداد حجم الخط.
- uint16_t _charactersize: ارتفاع الحرف.
void setTextBoundary (uint16_t _start_x ، uint16_t _end_x ، uint16_t _end_y) ؛
- ضبط نطاق السلسلة.
- تنسيق المحاور تدور مع "settextrotation"
- uint16_t _start_x: نقطة البداية x لسلسلة الأحرف عند حدوث كسر في السطر.
- uint16_t _end_x: النقطة النهائية x عند كسر الخط.
- uint16_t _end_y: النقطة النهائية y عند كسر الخط.
void setTextColor (uint8_t _online ، uint8_t _inside) ؛
- إعداد لون النص.
- UINT8_T _ONLINE: لون الخطوط العريضة.
- uint8_t _inside: لون ملء النص.
void setTextRotation (uint8_t _rotation) ؛
- دوران النص
- تدوير جنبا إلى جنب مع محاور الإحداثيات. الصورة هي الصورة التالية.

uint8_t _rotation: زاوية الدوران.
- (rotate_0/rotate_90/rotate_180/rotate_270)
void textDraw (uint16_t _x ، uint16_t _y ، const wchar_t _character []) ؛
- اكتب سلسلة إلى FrameBuffer.
- uint16_t _x: String Start Point x.
- uint16_t _y: سلسلة البداية y.
- const wchar_t _character []: سلسلة مؤشر (حرف مزدوج بايت).
textDraw void (uint16_t _x ، uint16_t _y ، const char _character []) ؛
- اكتب سلسلة إلى FrameBuffer.
- uint16_t _x: String Start Point x.
- uint16_t _y: سلسلة البداية y.
- const char _character []: سلسلة مؤشر (حرف واحد بايت).
void textDraw (uint16_t _x ، uint16_t _y ، سلسلة const _string) ؛
- اكتب سلسلة إلى FrameBuffer.
- uint16_t _x: String Start Point x.
- uint16_t _y: سلسلة البداية y.
- سلسلة const _string: مؤشر سلسلة (نوع السلسلة).
uint16_t getTringWidth (const wchar_t _character []) ؛
- const wchar_t _character []: سلسلة مؤشر (حرف مزدوج بايت).
- العودة: طول السلسلة. لا تعتبر فواصل الخط التلقائي.
- يمكن استخدامها لمركز محاذاة النص/اليمين.
uint16_t getStringWidth (const char _character []) ؛
- const char _character []: سلسلة مؤشر (حرف واحد بايت).
- العودة: طول السلسلة. لا تعتبر فواصل الخط التلقائي.
- يمكن استخدامها لمركز محاذاة النص/اليمين.
uint16_t getTringWidth (سلسلة const _string) ؛
- سلسلة const _string: مؤشر سلسلة (نوع السلسلة).
- العودة: طول السلسلة. لا تعتبر فواصل الخط التلقائي.
- يمكن استخدامها لمركز محاذاة النص/اليمين.
نهاية الفراغ () ؛
تنسيق FrameBuffer
توجيه بت عند تخزين المعلومات للبكسلات المتعددة لكل بايت من FrameBuffer.
يتم تقسيم أنواع أجهزة الإطار على نطاق واسع وفقًا لهذا الاتجاه.
مدعوم حاليًا: أفقي - 1،4،8bit
أفقي
مثال مع 1bit / 1pixel

رَأسِيّ
مثال مع 1bit / 1pixel

أصالة
- مشكلة ثابتة أنه لا يمكن قراءة بعض ملفات الخطوط.
- معالجة منحنيات بيزييه.
- وهو يدعم ما يصل إلى 3 منحنيات بيزييه ، ولكن الترتيب الرابع وما فوق يتم رسمها كخطوط مستقيمة.
- يمكن تعيين لون الخطوط العريضة ولون التعبئة بشكل فردي.
- يدعم الكتابة إلى المصفوفات. يتم رسم الخطوط في شكل من أشكال FrameBuffer (صفيف UINT8_T).
- Kerning من خلال قراءة جدول "كيرن".
- اقرأ جدول "HMTX" وضبط التصميم.
- عملية ملء فعالة.
العمل المستقبلي
truetype
- الدعم الكامل لـ "الحروف الرسومية المركبة"
- تنويع تنسيقات الإطار المدعومة.
- يتم دعم الدعم فقط لتنسيق "CMAP" 4 و "Kern" Format0.
- تصحيح أنه لا يمكن قراءة بعض الملفات.
- غير قادر على قراءة ملف TTF إذا كان اسم الملف طويلًا (STM32F103).
- القراءة الأسرع الأسلوب.
- تقليل استخدام SRAM.
- معالجة منحنى Bezier (عند تجاوز 3 أبعاد. حاليًا ، المعالجة المؤقتة).
رسم الإطار
وحدة تحكم مؤكدة
- ESP32 (المجلس)
- STM32F103C8T6 (المجلس)
العرض التوضيحي
- لون كامل
- ILI9341 DEMO
- SSD1331 العرض التوضيحي
- كثرة الوحيدات
- SSD1306 العرض التوضيحي
- Waveshare E-paper 2.9 بوصة العرض التوضيحي
- Waveshare E-Paper 7.5inch (B) العرض التوضيحي
ملحوظة
لا تتردد في نشر أي أخطاء أو أفكار للإصلاحات والتحسينات!
تأكد من حقوق الطبع والنشر لملف الخط. لم أقم بتوزيع ملفات الخط.
يعتمد على الكود بواسطة Garretlab وتغييره.
https://github.com/garretlab/truetype
https://garretlab.web.fc2.com/arduino/lab/truetype/