Actually, after several hours of trying and testing, I realized that rasterized glyph data has some irrelevant bytes called padding . As an illustration, the glyph data in the buffer is shown below: ( o / x are significant data, but not significant)
0 1 2 3 4 5 6 7 0 oxoxox . . 1 xoxoxo . . 2 oxoxox . . 3 xoxoxo . . 4 oxoxox . .
There are three numbers that describe the size of this buffer, the first two are obvious:
rows = 5 //since there are 5 rows width = 6 //since each row has 6 bytes of data
However, there is actually a third:
pitch = 8 //the actual width of rows, including "padding"
If you ignore this property of the buffer, as I do, and you are mistaken that width is the actual width, you will display a distorted or translated form of the glyph.
My understanding of this “add-on” is similar to Dayvat Pandya, this is compensation. However, this is not a compensation for parity (obviously, +2 does not change parity), by default it is compensation so that the actual width is a multiple of 4. But yes, you can change 4 to 2 or even 1. I assume by forming a data matrix with with a width of 4, it can be loaded faster, for example, to load in longint instead of byte .
Nevertheless, the insight of R.. really impressed me. I think you guys just can't understand that I can make such a basic mistake.