const__pageData=JSON.parse('{"title":"QMK Font Format","description":"","frontmatter":{},"headers":[],"relativePath":"quantum_painter_qff.md","filePath":"quantum_painter_qff.md"}');
const_sfc_main={name:"quantum_painter_qff.md"};
const_hoisted_1=/* @__PURE__ */createStaticVNode('<h1id="qmk-font-format"tabindex="-1">QMKFontFormat<aclass="header-anchor"href="#qmk-font-format"aria-label="Permalink to "QMK Font Format {#qmk-font-format}""></a></h1><p>QMKusesafontformat<em>("QuantumFontFormat"-QFF)</em>specificallyforresource-constrainedsystems.</p><p>Thisformatiscapableofencoding1-,2-,4-,and8-bit-per-pixelgreyscale-andpalette-basedimagesintoafont.ItalsoincludesRLEforpixeldataforsomebasiccompression.</p><p>Allintegervaluesareinlittle-endianformat.</p><p>TheQFFisdefinedintermsof<em>blocks</em>--each<em>block</em>containsa<em>header</em>andanoptional<em>blob</em>ofdata.The<em>header</em>containstheblock's<em>typeid</em>,andthelengthofthe<em>blob</em>thatfollows.Eachblocktypeisdenotedbyadifferent<em>typeid</em>hasitsownblockdefinitionbelow.Allblocksaredefinedaspackedstructs,containingzeropaddingbetweenfields.</p><p>Thegeneralstructureofthefileis:</p><ul><li><em>Fontdescriptorblock</em></li><li><em>ASCIIglyphblock</em>(optional,onlyifASCIIglyphsareincluded)</li><li><em>Unicodeglyphblock</em>(optional,onlyifUnicodeglyphsareincluded)</li><li><em>Fontpaletteblock</em>(optional,dependingonframeformat)</li><li><em>Fontdatablock</em></li></ul><h2id="qff-block-header"tabindex="-1">BlockHeader<aclass="header-anchor"href="#qff-block-header"aria-label="Permalinkto"BlockHeader{#qff-block-header}""></a></h2><p>Theblockheaderisidenticalto<ahref="./quantum_painter_qgf#qgf-block-header">QGF'sblockheader</a>,andispresentforallblocks,includingthefontdescriptor.</p><h2id="qff-font-descriptor"tabindex="-1">Fontdescriptorblock<aclass="header-anchor"href="#qff-font-descriptor"aria-label="Permalinkto"Fontdescriptorblock{#qff-font-descriptor}""></a></h2><ul><li><em>typeid</em>=0x00</li><li><em>length</em>=20</li></ul><p>Thisblockmustbelocatedatthestartofthefilecontents,andcanexistamaximumofonceinanentireQGFfile.Itisalwaysfollowedbyeitherthe<em>ASCIIglyphtable</em>orthe<em>Unicodeglyphtable</em>,dependingonwhichglyphsareincludedinthefont.</p><p><em>Block</em>format:</p><divclass="language-cvp-adaptive-theme"><buttontitle="CopyCode"class="copy"></button><spanclass="lang">c</span><preclass="shikishiki-themesgithub-lightgithub-darkvp-code"><code><spanclass="line"><spanstyle="--shiki-light:#D73A49;--shiki-dark:#F97583;">typedef</span><spanstyle="--shiki-light:#D73A49;--shiki-dark:#F97583;">struct</span><spanstyle="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">__attribute__</span><spanstyle="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">((packed))</span><spanstyle="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">qff_font_descriptor_v1_t</span><spanstyle="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">{</span></span>\n<spanclass="line"><spanstyle="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">qgf_block_header_v1_t</span><spanstyle="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">header;</span><spanstyle="--shiki-light:#6A737D;--shiki-dark:#6A737D;">//={.type_id=0x00,.neg_type_id=(~0x00),.length=20}</span></span>\n<spanclass="line"><spanstyle="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">uint24_t</span><spanstyle="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">magic;</span><spanstyle="--shiki-light:#6A737D;--shiki-dark:#6A737D;">//constant,equalto0x464651("QFF")</span></span>\n<spanclass="line"><spanstyle="--shiki-light:#D73A49;--shiki-dark:#F97583;">uint8_t</span><spanstyle="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">qff_version;</span><spanstyle="--shiki-light:#6A737D;--shiki-dark:#6A737D;">//constant,equalto0x01</span></span>\n<spanclass="line"><spanstyle="--shiki-light:#D73A49;--shiki-dark:#F97583;">uint32_t</span><spanstyle="--shiki-light