рд╕рдмрд╕реЗ рдЫреЛрдЯрд╛ рд╕рдВрднрд╡ рдлрд╝реЙрдиреНрдЯ

рдХрд╛рд░реНрдп: рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреА рд╕рдмрд╕реЗ рдЫреЛрдЯреА рд╕рдВрднрд╡ рд░рд╛рд╢рд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рд╕рд╛рд░реНрдердХ рдкрд╛рда рдкреНрд░рд╕реНрддреБрдд рдХрд░рдирд╛ред


  • рдПрдХ рдкрдардиреАрдп рдлрд╝реЙрдиреНрдЯ рдХрд┐рддрдирд╛ рдЫреЛрдЯрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ?
  • рдЗрд╕реЗ рд╕реНрдЯреЛрд░ рдХрд░рдиреЗ рдореЗрдВ рдХрд┐рддрдиреА рдореЗрдореЛрд░реА рд▓рдЧреЗрдЧреА?
  • рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рддрдирд╛ рдХреЛрдб рд▓рдЧреЗрдЧрд╛?

рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рд╣рдореЗрдВ рдХреНрдпрд╛ рдорд┐рд▓рддрд╛ рд╣реИред рд╕реНрдкреЙрдЗрд▓рд░:



рдмрд┐рдЯрдореИрдкреНрд╕ рдХрд╛ рдкрд░рд┐рдЪрдп


рдХрдВрдкреНрдпреВрдЯрд░ рдмрд┐рдЯрдореИрдк рдХреЗ рд░реВрдк рдореЗрдВ рдмрд┐рдЯрдореИрдк рдкреНрд░рд╕реНрддреБрдд рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ .bmp рдкреНрд░рд╛рд░реВрдк рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдореЗрдореЛрд░реА рдореЗрдВ рдкрд┐рдХреНрд╕реЗрд▓ рдХреЛ рд╕реНрдЯреЛрд░ рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИред рдпрд╣ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдХреНрдпрд╛ рд╣реЛ рд░рд╣рд╛ рд╣реИ, рд╣рдореЗрдВ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдХреБрдЫ рд╕реАрдЦрдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИред


рд╕рдореВрд╣реЛрдВ


рдПрдХ рдЫрд╡рд┐ рдореЗрдВ рдЖрдорддреМрд░ рдкрд░ рдПрдХ рджреВрд╕рд░реЗ рдХреЗ рдКрдкрд░ рдХрдИ рдкрд░рддреЗрдВ рд╣реЛрддреА рд╣реИрдВ ред рдЬреНрдпрд╛рджрд╛рддрд░ рд╡реЗ рдЖрд░рдЬреАрдмреА рд░рдВрдЧ рдЕрдВрддрд░рд┐рдХреНрд╖ рдХреЗ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдХреЗ рдЕрдиреБрд░реВрдк рд╣реЛрддреЗ рд╣реИрдВ ред рдПрдХ рдкрд░рдд рд▓рд╛рд▓ рдХреЗ рд▓рд┐рдП , рдПрдХ рд╣рд░реА рдХреЗ рд▓рд┐рдП рдФрд░ рдПрдХ рдиреАрд▓реА рдХреЗ рд▓рд┐рдП ред рдпрджрд┐ рдЫрд╡рд┐ рдкреНрд░рд╛рд░реВрдк рдкрд╛рд░рджрд░реНрд╢рд┐рддрд╛ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ, рддреЛ рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рдЪреМрдереА рдкрд░рдд рдмрдирд╛рдИ рдЬрд╛рддреА рд╣реИ, рдЬрд┐рд╕реЗ рдЖрдорддреМрд░ рдкрд░ рдЕрд▓реНрдлрд╛ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдореЛрдЯреЗ рддреМрд░ рдкрд░, рдПрдХ рд░рдВрдЧ рдХреА рдЫрд╡рд┐ рддреАрди (рдпрд╛ рдЪрд╛рд░, рдЕрдЧрд░ рдПрдХ рдЕрд▓реНрдлрд╛ рдЪреИрдирд▓ рд╣реИ) рдХрд╛рд▓реЗ рдФрд░ рд╕рдлреЗрдж, рдПрдХ рдХреЗ рдКрдкрд░ рдПрдХ рд╕реНрдерд┐рдд рд╣реИред


  • RGB рдХреЗрд╡рд▓ рд░рдВрдЧ рд╕реНрдерд╛рди рдирд╣реАрдВ рд╣реИ; рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, JPEG рдкреНрд░рд╛рд░реВрдк, YUV рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рд╣рдореЗрдВ рдмрд╛рдХреА рд░рдВрдЧ рд╕реНрдерд╛рдиреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрдЧреА, рдЗрд╕рд▓рд┐рдП рд╣рдо рдЙрди рдкрд░ рд╡рд┐рдЪрд╛рд░ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред

рдкрд░рддреЛрдВ рдХрд╛ рдПрдХ рд╕реЗрдЯ рдореЗрдореЛрд░реА рдореЗрдВ рджреЛ рддрд░реАрдХреЛрдВ рд╕реЗ рджрд░реНрд╢рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрд╛ рддреЛ рдЙрдиреНрд╣реЗрдВ рдЕрд▓рдЧ рд╕реЗ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдпрд╛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкрд░рддреЛрдВ рд╕реЗ рдорд╛рдиреЛрдВ рдХреЛ рдЗрдВрдЯрд░рд▓реЗрдп рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдмрд╛рдж рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдкрд░рддреЛрдВ рдХреЛ рдЪреИрдирд▓ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ , рдФрд░ рдпрд╣ рд╣реИ рдХрд┐ рд╕рдмрд╕реЗ рдЖрдзреБрдирд┐рдХ рдкреНрд░рд╛рд░реВрдк рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред


рдорд╛рди рд▓реЗрдВ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ 4x4 рдбреНрд░рд╛рдЗрдВрдЧ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рддреАрди рдкрд░рддреЗрдВ рд╣реИрдВ: рдЖрд░ рд▓рд╛рд▓ рдХреЗ рд▓рд┐рдП, рдЬреА рд╣рд░реЗ рд░рдВрдЧ рдХреЗ рд▓рд┐рдП рдФрд░ рдмреА рдкреНрд░рддреНрдпреЗрдХ рдкрд┐рдХреНрд╕реЗрд▓ рдХреЗ рдиреАрд▓реЗ рдШрдЯрдХ рдХреЗ рд▓рд┐рдПред рдЗрд╕реЗ рдЗрд╕ рддрд░рд╣ рджрд░реНрд╢рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:


  RRRR RRRR RRRR RRRR GGGG GGGG GGGG GGGG BBBB BBBB BBBB BBBB 

рддреАрдиреЛрдВ рдкрд░рддреЛрдВ рдХреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╡реИрдХрд▓реНрдкрд┐рдХ рд╕реНрд╡рд░реВрдк рдЕрд▓рдЧ рджрд┐рдЦрддрд╛ рд╣реИ:


  RGB RGB RGB RGB RGB RGB RGB RGB RGB RGB RGB RGB RGB RGB RGB RGB 

  • рдкрд╛рддреНрд░реЛрдВ рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдЯреНрд░рд┐рдкрд▓ рдмрд┐рд▓реНрдХреБрд▓ рдПрдХ рдкрд┐рдХреНрд╕реЗрд▓ рд╕реЗ рдореЗрд▓ рдЦрд╛рддреА рд╣реИ
  • рдЯреНрд░рд┐рдкрд▓ рдХреЗ рднреАрддрд░ рдХреЗ рдорд╛рди RGB рдХреНрд░рдо рдореЗрдВ рд╣реИрдВред рдХрднреА-рдХрднреА рдПрдХ рдЕрд▓рдЧ рдЖрджреЗрд╢ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдмреАрдЬреАрдЖрд░ ), рд▓реЗрдХрд┐рди рдпрд╣ рд╕рдмрд╕реЗ рдЖрдо рд╣реИред

рд╕рд╛рджрдЧреА рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдкрд┐рдХреНрд╕рд▓ рдХреЛ рджреЛ-рдЖрдпрд╛рдореА рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреЗ рд░реВрдк рдореЗрдВ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд┐рдпрд╛, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЕрдзрд┐рдХ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рдпрд╣ рдпрд╛ рд╡рд╣ рдЯреНрд░рд┐рдкрд▓ рдЫрд╡рд┐ рдореЗрдВ рдХрд╣рд╛рдВ рд╣реИред рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдХрдВрдкреНрдпреВрдЯрд░ рдореЗрдореЛрд░реА рджреЛ-рдЖрдпрд╛рдореА рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ-рдЖрдпрд╛рдореА рд╣реИ, рдЗрд╕рд▓рд┐рдП 4x4 рдЪрд┐рддреНрд░ рдЗрд╕ рддрд░рд╣ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛:


 RGB RGB RGB RGB RGB RGB RGB RGB RGB RGB RGB RGB RGB RGB RGB RGB 

bpp


рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдирд╛рдо bpp рдмрд┐рдЯреНрд╕ рдпрд╛ рдмрд╛рдЗрдЯреНрд╕ рдкреНрд░рддрд┐ рдкрд┐рдХреНрд╕реЗрд▓ (рдмрд┐рдЯреНрд╕ / рдмрд╛рдЗрдЯреНрд╕ рдкреНрд░рддрд┐ рдкрд┐рдХреНрд╕реЗрд▓) рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддрд╛ рд╣реИред рдЖрдкрдиреЗ 3bpp 24bpp рдпрд╛ 3 3bpp рджреЗрдЦрд╛ 3bpp ред рдЗрди рджреЛрдиреЛрдВ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХрд╛ рдПрдХ рд╣реА рдорддрд▓рдм рд╣реИ - 24 рдмрд┐рдЯ рдкреНрд░рддрд┐ рдкрд┐рдХреНрд╕реЗрд▓ рдпрд╛ 3 рдмрд╛рдЗрдЯ рдкреНрд░рддрд┐ рдкрд┐рдХреНрд╕реЗрд▓ ред рдЪреВрдВрдХрд┐ рдПрдХ рдмрд╛рдЗрдЯ рдореЗрдВ рд╣рдореЗрд╢рд╛ 8 рдмрд┐рдЯреНрд╕ рд╣реЛрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЖрдк рдкреНрд░рд╢реНрди рдореЗрдВ рдЗрдХрд╛рдЗрдпреЛрдВ рдореЗрдВ рд╕реЗ рдХрд┐рд╕ рдХреЗ рдореВрд▓реНрдп рд╕реЗ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛ рд╕рдХрддреЗ рд╣реИрдВред


рдореЗрдореЛрд░реА рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡


24bpp , рдЙрд░реНрдл тАЛтАЛ3 3bpp - рдлреВрд▓реЛрдВ рдХреЗ рднрдВрдбрд╛рд░рдг рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдЖрдо рдкреНрд░рд╛рд░реВрдкред рдпрд╣ рд╣реИ рдХрд┐ RGB рдСрд░реНрдбрд░ рдореЗрдВ рдПрдХ рдПрдХрд▓ рдкрд┐рдХреНрд╕реЗрд▓ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдмрд┐рдЯреНрд╕ рдХреЗ рд╕реНрддрд░ рдкрд░ рдХреИрд╕реЗ рджрд┐рдЦрддрд╛ рд╣реИред


  0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23  RRRRRRRRGGGGGGGGBBBBB BBB 

  • рдЖрд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдмрд╛рдЗрдЯ, рдЬреА рдХреЗ рд▓рд┐рдП рдПрдХ рдФрд░ рдмреА рдХреЗ рд▓рд┐рдП рдПрдХ, рдХреБрд▓ рддреАрди рдмрд╛рдЗрдЯреНрд╕ред
  • рдЙрдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдореЗрдВ 0 рд╕реЗ 255 рддрдХ рдХрд╛ рдорд╛рди рд╣реИред

рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рджрд┐рдП рдЧрдП рдкрд┐рдХреНрд╕реЗрд▓ рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд░рдВрдЧ рд╣реИ:


  • R 255
  • G 80
  • B 100

рдлрд┐рд░ 255 рдкрд╣рд▓реЗ рдмрд╛рдЗрдЯ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдП 255 , рджреВрд╕рд░реЗ рдореЗрдВ 80 рдФрд░ рддреАрд╕рд░реЗ рдореЗрдВ 100 ред


рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдмрд╛рд░, рдЗрди рдореВрд▓реНрдпреЛрдВ рдХреЛ рд╣реЗрдХреНрд╕рд╛рдбреЗрд╕рд┐рдорд▓ рдореЗрдВ рджрд░реНрд╢рд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред рдХрд╣реЛ #ff5064 рдпрд╣ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдФрд░ рдХреЙрдореНрдкреИрдХреНрдЯ рд╣реИ: R = 0xff (рдпрд╛рдиреА рджрд╢рдорд▓рд╡ рдореЗрдВ R=255 ), G = 0x50 (= G=80 ), B=0x64 (= B=100 )ред


  • рд╣реЗрдХреНрд╕рд╛рдбреЗрд╕рд┐рдорд▓ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдореЗрдВ рдПрдХ рдЙрдкрдпреЛрдЧреА рд╕рдВрдкрддреНрддрд┐ рд╣реИред рдЪреВрдВрдХрд┐ рд░рдВрдЧ рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдмрд╛рдЗрдЯ рдХреЛ рджреЛ рд╡рд░реНрдгреЛрдВ рджреНрд╡рд╛рд░рд╛ рджрд░реНрд╢рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдкреНрд░рддреНрдпреЗрдХ рд╡рд░реНрдг рдареАрдХ рдЖрдзрд╛ рдмрд╛рдЗрдЯ рдпрд╛ рдЪрд╛рд░ рдмрд┐рдЯреНрд╕ рдХреЛ рдПрдиреНрдХреЛрдб рдХрд░рддрд╛ рд╣реИ ред 4 рдмрд┐рдЯреНрд╕, рд╡реИрд╕реЗ, рдирд┐рдмрд▓ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред

рд▓рд╛рдЗрди рдХреА рдЪреМрдбрд╝рд╛рдИ


рдЬрдм рдкрд┐рдХреНрд╕реЗрд▓ рдПрдХ рдХреЗ рдмрд╛рдж рдПрдХ рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдореЗрдВ рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рдЪреИрдирд▓ рд╣реЛрддреЗ рд╣реИрдВ, рддреЛ рдбреЗрдЯрд╛ рдЖрд╕рд╛рдиреА рд╕реЗ рднреНрд░рдорд┐рдд рд╣реЛрддрд╛ рд╣реИред рдпрд╣ рдЬреНрдЮрд╛рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рдПрдХ рдкрдВрдХреНрддрд┐ рдХрдм рд╕рдорд╛рдкреНрдд рд╣реЛрддреА рд╣реИ рдФрд░ рдЕрдЧрд▓реА рд╢реБрд░реВ рд╣реЛрддреА рд╣реИ, рдЗрд╕рд▓рд┐рдП, рдмрд┐рдЯрдореИрдк рдХреЗ рд╕рд╛рде рдПрдХ рдлрд╝рд╛рдЗрд▓ рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЫрд╡рд┐ рдХрд╛ рдЖрдХрд╛рд░ рдФрд░ bpp рдЬрд╛рдирдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЪрд┐рддреНрд░ рдореЗрдВ w = 4 рдкрд┐рдХреНрд╕реЗрд▓ рдХреА рдЪреМрдбрд╝рд╛рдИ рд╣реИ рдФрд░ рдЗрдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдкрд┐рдХреНрд╕реЗрд▓ рдореЗрдВ 3 рдмрд╛рдЗрдЯреНрд╕ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╕реНрдЯреНрд░рд┐рдВрдЧ 12 рдХреЗ рд╕рд╛рде рдПрдиреНрдХреЛрдбреЗрдб рд╣реИ (рд╕рд╛рдорд╛рдиреНрдп рд╕реНрдерд┐рддрд┐ w*bpp ) рдмрд╛рдЗрдЯреНрд╕ рдореЗрдВред


  • рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╣рдореЗрд╢рд╛ w*bpp рдмрд╛рдЗрдЯреНрд╕ рдХреЗ рд╕рд╛рде рдПрдиреНрдХреЛрдб рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ; рдЫрд╡рд┐ рдХреА рдЪреМрдбрд╝рд╛рдИ рдХреЛ рдХреБрдЫ рдЖрдХрд╛рд░ рдореЗрдВ рд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдХреНрд╕рд░, "рдЫрд┐рдкреЗ рд╣реБрдП" рдкрд┐рдХреНрд╕рд▓ рдХреЛ рдЗрд╕рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЪрд┐рддреНрд░реЛрдВ рдХреЛ рд╕реНрдХреЗрд▓ рдХрд░рдирд╛ рддрдм рдФрд░ рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реЛрддрд╛ рд╣реИ рдЬрдм рдкрд┐рдХреНрд╕реЗрд▓ рдореЗрдВ рдЙрдирдХрд╛ рдЖрдХрд╛рд░ рджреЛ рдХреА рд╢рдХреНрддрд┐ рдХреЗ рдмрд░рд╛рдмрд░ рд╣реЛрддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдлрд╝рд╛рдЗрд▓ рдореЗрдВ 120x120 рдкрд┐рдХреНрд╕реЗрд▓ рдХреА рдЫрд╡рд┐ (рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП рд╕реБрд▓рдн) рд╣реЛ рд╕рдХрддреА рд╣реИ, рд▓реЗрдХрд┐рди 128x128 рдХреА рдЫрд╡рд┐ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИред рдЬрдм рдХреЛрдИ рдЪрд┐рддреНрд░ рд╕реНрдХреНрд░реАрди рдкрд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдЗрди рдкрд┐рдХреНрд╕реЗрд▓ рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╣рдореЗрдВ рдЙрдирдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдиреЗ рдХреА рдЬрд░реВрд░рдд рдирд╣реАрдВ рд╣реИред

рдПрдХ рдЖрдпрд╛рдореА рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдореЗрдВ рдХрд┐рд╕реА рднреА рдкрд┐рдХреНрд╕реЗрд▓ (x, y) рдХрд╛ рд╕рдордиреНрд╡рдп рд╣реИ (y * w + x) * bpp ред рдпрд╣, рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ, рд╕реНрдкрд╖реНрдЯ рд╣реИ: y рд▓рд╛рдЗрди рдирдВрдмрд░ рд╣реИ, рдкреНрд░рддреНрдпреЗрдХ рдкрдВрдХреНрддрд┐ рдореЗрдВ w рдкрд┐рдХреНрд╕реЗрд▓ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП y * w рд╡рд╛рдВрдЫрд┐рдд рд▓рд╛рдЗрди рдХреА рд╢реБрд░реБрдЖрдд рд╣реИ, рдФрд░ +x рд╣рдореЗрдВ рдЗрд╕рдХреЗ рднреАрддрд░ рд╡рд╛рдВрдЫрд┐рдд x рдЬрд╛рддрд╛ рд╣реИред рдФрд░ рдЪреВрдВрдХрд┐ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдмрд╛рдЗрдЯреНрд╕ рдореЗрдВ рдирд╣реАрдВ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдкрд┐рдХреНрд╕реЗрд▓ рдореЗрдВ, рдпрд╣ рд╕рдм рдмрд╛рдЗрдЯ рдкрд┐рдХреНрд╕реЗрд▓ рдХреЗ рдЖрдХрд╛рд░ рд╕реЗ рдЧреБрдгрд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдмрд╛рдЗрдЯреНрд╕ рдореЗрдВред рдЪреВрдВрдХрд┐ рдкрд┐рдХреНрд╕реЗрд▓ рдореЗрдВ рдПрдХ рдЧреИрд░-рдЖрдХрд╛рд░ рдХрд╛ рдЖрдХрд╛рд░ рд╣реЛрддрд╛ рд╣реИ, рдЖрдкрдХреЛ рдкреНрд░рд╛рдкреНрдд рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рд╕реЗ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реБрдП, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ bpp рдмрд╛рдЗрдЯреНрд╕ рдкрдврд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдФрд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╡рд╛рдВрдЫрд┐рдд рдкрд┐рдХреНрд╕реЗрд▓ рдХрд╛ рдкреВрд░рд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рд╣реЛрдЧрд╛ред


рдлрд╝реЙрдиреНрдЯ рдПрдЯрд▓рд╕


рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдореМрдЬреВрджрд╛ рдореЙрдирд┐рдЯрд░ рдПрдХ рдкрд┐рдХреНрд╕реЗрд▓ рдХреЛ рдкреВрд░реЗ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рддреАрди рдЙрдкрдкреНрд░рд┐рдХреНрд╕рд▓ - рд▓рд╛рд▓, рдиреАрд▓рд╛ рдФрд░ рд╣рд░рд╛ред рдпрджрд┐ рдЖрдк рдореЙрдирд┐рдЯрд░ рдХреЛ рдЖрд╡рд░реНрдзрди рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рджреЗрдЦрддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛:




рд╣рдо рдПрд▓рд╕реАрдбреА рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕ рддрд░рд╣ рдХреЗ рдореЙрдирд┐рдЯрд░ рд╕реЗ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ рдЖрдк рдЗрд╕ рдкрд╛рда рдХреЛ рдкрдврд╝рддреЗ рд╣реИрдВред рдмреЗрд╢рдХ, рдиреБрдХрд╕рд╛рди рд╣реИрдВ:


  • рд╕рднреА рдореИрдЯреНрд░рд┐рд╕реЗрд╕ рд╕рдмрдкрд┐рдХреНрд╕рд▓ рдХреЗ рдЗрд╕ рдХреНрд░рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рдХрднреА-рдХрднреА рдмреАрдЬреАрдЖрд░ред
  • рдпрджрд┐ рдЖрдк рдореЙрдирд┐рдЯрд░ рдХреЛ рдмрджрд▓рддреЗ рд╣реИрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд▓реИрдВрдбрд╕реНрдХреЗрдк рдУрд░рд┐рдПрдВрдЯреЗрд╢рди рдореЗрдВ рдлреЛрди рдХреЛ рджреЗрдЦреЗрдВ), рддреЛ рдкреИрдЯрд░реНрди рднреА рдШреВрдо рдЬрд╛рдПрдЧрд╛ рдФрд░ рдлрд╝реЙрдиреНрдЯ рдХрд╛рдо рдХрд░рдирд╛ рдмрдВрдж рдХрд░ рджреЗрдЧрд╛ред
  • рд╡рд┐рднрд┐рдиреНрди рдореИрдЯреНрд░рд┐рдХреНрд╕ рдУрд░рд┐рдПрдВрдЯреЗрд╢рди рдФрд░ рд╕рдмрдкрд┐рдХреНрд╕рд▓ рдХреА рд╡реНрдпрд╡рд╕реНрдерд╛ рдХреЛ рд╕реНрд╡рдпрдВ рдлреЙрдиреНрдЯ рдХреЛ рд░рд┐рд╡рд╛рдЗрдЬ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред
  • рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдпрд╣ AMOLED рдбрд┐рд╕реНрдкреНрд▓реЗ рдкрд░ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдкреЗрдирдЯрд╛рдЗрд▓ рд▓реЗрдЖрдЙрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕ рддрд░рд╣ рдХреЗ рдбрд┐рд╕реНрдкреНрд▓реЗ рдореЛрдмрд╛рдЗрд▓ рдбрд┐рд╡рд╛рдЗрд╕ рдореЗрдВ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред

рд░рд┐рдЬрд╝реЙрд▓реНрдпреВрд╢рди рдмрдврд╝рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдмрдкрд┐рдХреНрд╕рд▓ рд╣реИрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╕рдмрдкрд┐рдХреНрд╕рд▓ рд░реЗрдВрдбрд░рд┐рдВрдЧ рдХрд╣рд▓рд╛рддрд╛ рд╣реИ ред рдЖрдк рдЯрд╛рдЗрдкреЛрдЧреНрд░рд╛рдлреА рдореЗрдВ рдЗрд╕рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрд╣рд╛рдБ ред


рд╕реМрднрд╛рдЧреНрдп рд╕реЗ рд╣рдорд╛рд░реЗ рд▓рд┐рдП, рдореИрдЯ рд╕рд░рдиреЛрд╡ рдиреЗ рдкрд╣рд▓реЗ рд╣реА рдПрдХ рдЫреЛрдЯреЗ рдорд┐рд▓рд┐рдЯреЗрдХреНрд╕ рдлрд╝реЙрдиреНрдЯ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдмрдкрд┐рдХреНрд╕рд▓ рд░реЗрдВрдбрд░рд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкрддрд╛ рд▓рдЧрд╛ рд▓рд┐рдпрд╛ред рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ, рдЙрдиреНрд╣реЛрдВрдиреЗ рдпрд╣ рдЫреЛрдЯреА рддрд╕реНрд╡реАрд░ рдмрдирд╛рдИ:



рдЬреЛ, рдпрджрд┐ рдЖрдк рдореЙрдирд┐рдЯрд░ рдХреЛ рдмрд╣реБрдд рдзреНрдпрд╛рди рд╕реЗ рджреЗрдЦрддреЗ рд╣реИрдВ, рддреЛ рдРрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ:



рдФрд░ рдпрд╣рд╛рдБ рдпрд╣, рдкреНрд░реЛрдЧреНрд░рд╛рдореЗрдЯрд┐рдХ рд░реВрдк рд╕реЗ 12 рдЧреБрдирд╛ рдмрдврд╝рд╛ рд╣реИ:



рдЙрдирдХреЗ рдХрд╛рдо рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдореИрдВрдиреЗ рдПрдХ рдлреЙрдиреНрдЯ рдПрдЯрд▓рд╕ рдмрдирд╛рдпрд╛, рдЬрд┐рд╕рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рд╡рд░реНрдг 1x5 рдкрд┐рдХреНрд╕реЗрд▓ рдХреЗ рдХреЙрд▓рдо рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИред рд╡рд░реНрдг рдХреНрд░рдо рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:


 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 


рд╡рд╣реА рдПрдЯрд▓рд╕ 12 рдЧреБрдирд╛ рдмрдврд╝ рдЧрдпрд╛:



рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП 36 рд╡рд░реНрдгреЛрдВ рдХреЗ рд╕рд╛рде, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ 365 рдкрд┐рдХреНрд╕реЗрд▓ 365 рд╣реЛрддреЗ рд╣реИрдВред рдпрджрд┐ рд╣рдо рдорд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдкрд┐рдХреНрд╕реЗрд▓ 3 рдмрд╛рдЗрдЯреНрд╕ рдкрд░ рдХрдмреНрдЬрд╛ рдХрд░ рд▓реЗрддрд╛ рд╣реИ, рддреЛ рд╣рдореЗрдВ рдкреВрд░реА рддрд╕реНрд╡реАрд░ (рд▓рдЧрднрдЧ) рдХреЛ рд╕реНрдЯреЛрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП 36*5*3 = 540 рдмрд╛рдЗрдЯреНрд╕ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ ред рдореВрд▓ рдореЗрдВ, рдЕрд▓реНрдлрд╛ рдЪреИрдирд▓ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рдВрдкрд╛рджрди рдХреА рдПрдХ рднреНрд░рд╛рдордХ рд╢реНрд░реГрдВрдЦрд▓рд╛, рдореЗрдЯрд╛рдбреЗрдЯрд╛ рдХреЛ рд╣рдЯрд╛рдиреЗ, рдЖрджрд┐)ред nред рдЕрдиреБрд╡рд╛рдж рдореЗрдВ, рдореИрдВрдиреЗ рдЗрд╕реЗ рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдФрд░ рдХреЗрд╡рд▓ рдлрд╝рд╛рдЗрд▓ рдХреЗ рдЕрдВрддрд┐рдо рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ )ред PNG рдлрд╛рдЗрд▓ рдкреАрдВрдЧрдХреНрд░рд╢ рдФрд░ рдСрдкреНрдЯрд┐рдкрдВрдЧ рд╕реЗ рд╣реЛрдХрд░ рдЧреБрдЬрд░рддреА рд╣реИ рдФрд░ рднреА рдХрдо рд▓рдЧрддреА рд╣реИ:


 # wc -c < font-crushed.png 390 

рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЖрдк рдереЛрдбрд╝рд╛ рдЕрд▓рдЧ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдЕрдкрдирд╛рддреЗ рд╣реИрдВ рддреЛ рдЖрдк рдФрд░ рднреА рдЫреЛрдЯреЗ рдЖрдХрд╛рд░ рд╣рд╛рд╕рд┐рд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ


рджрдмрд╛рд╡


рдЪреМрдХрд╕ рдкрд╛рдардХ рджреЗрдЦ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдПрдЯрд▓рд╕ рдХреЗрд╡рд▓ 7 рд░рдВрдЧреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ:


  1. #ffffff
  2. #ff0000
  3. #00ff00
  4. #0000ff
  5. #00ffff
  6. #ff00ff
  7. #ffff00

рдкреИрд▓реЗрдЯ


рдРрд╕реА рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ, рдкреИрд▓реЗрдЯ рдмрдирд╛рдирд╛ рдЕрдХреНрд╕рд░ рдЖрд╕рд╛рди рд╣реЛрддрд╛ рд╣реИред рдлрд┐рд░ рдкреНрд░рддреНрдпреЗрдХ рдкрд┐рдХреНрд╕реЗрд▓ рдХреЗ рд▓рд┐рдП рдЖрдк рддреАрди рдмрд╛рдЗрдЯреНрд╕ рд░рдВрдЧ рдирд╣реАрдВ рдЬрдорд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рдкреИрд▓реЗрдЯ рдореЗрдВ рд░рдВрдЧ рд╕рдВрдЦреНрдпрд╛ред рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, 3 рдмрд┐рдЯреНрд╕ ( 7 < 2^3 ) 7 рд░рдВрдЧреЛрдВ рдореЗрдВ рд╕реЗ рдЪреБрдирдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реЛрдВрдЧреЗред рдпрджрд┐ рд╣рдо рдкреНрд░рддреНрдпреЗрдХ рдкрд┐рдХреНрд╕реЗрд▓ рдХреЛ рддреАрди-рдмрд┐рдЯ рдорд╛рди рдЕрд╕рд╛рдЗрди рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╕рдВрдкреВрд░реНрдг рдПрдЯрд▓рд╕ 68 рдмрд╛рдЗрдЯреНрд╕ рдореЗрдВ рдлрд┐рдЯ рд╣реЛрдЧрд╛ред


  • рдкрд╛рдардХ, рдбреЗрдЯрд╛ рд╕рдВрдкреАрдбрд╝рди рдореЗрдВ рдирд┐рдкреБрдг, рдЙрддреНрддрд░ рджреЗ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░ "рдЕрдВрд╢ рдмрд┐рдЯреНрд╕" рдЬреИрд╕реА рдХреЛрдИ рдЪреАрдЬ рд╣реИ рдФрд░ рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдкреНрд░рддрд┐ рдкрд┐рдХреНрд╕реЗрд▓ 2.875 рдмрд┐рдЯреНрд╕ рдкрд░реНрдпрд╛рдкреНрдд рд╣реИрдВред рдпрд╣ рдШрдирддреНрд╡ рдХрд╛рд▓рд╛ рдЬрд╛рджреВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдЕрдВрдХрдЧрдгрд┐рдд рдХреЛрдбрд┐рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рдЬрд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред рд╣рдо рдРрд╕рд╛ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ, рдХреНрдпреЛрдВрдХрд┐ рдЕрдВрдХрдЧрдгрд┐рдд рдХреЛрдбрд┐рдВрдЧ рдПрдХ рдЬрдЯрд┐рд▓ рдмрд╛рдд рд╣реИ, рдФрд░ 68 рдмрд╛рдЗрдЯреНрд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рд╕рд╛ рд╣реИред

рд╕рдВрд░реЗрдЦрдг


рддреАрди-рдмрд┐рдЯ рдХреЛрдбрд┐рдВрдЧ рдореЗрдВ рдПрдХ рдЧрдВрднреАрд░ рдЦрд╛рдореА рд╣реИред рдкрд┐рдХреНрд╕реЗрд▓ рд╕рдорд╛рди рд░реВрдк рд╕реЗ 8-рдмрд┐рдЯ рдмрд╛рдЗрдЯреНрд╕ рдореЗрдВ рд╡рд┐рддрд░рд┐рдд рдирд╣реАрдВ рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдмрд╛рдЗрдЯреНрд╕ рд╕рдмрд╕реЗ рдЫреЛрдЯреЗ рдкрддреЗ рдпреЛрдЧреНрдп рдореЗрдореЛрд░реА рдХреНрд╖реЗрддреНрд░ рд╣реИрдВред рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рд╣рдо рддреАрди рдкрд┐рдХреНрд╕реЗрд▓ рдмрдЪрд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ:


 ABC 

рдпрджрд┐ рдкреНрд░рддреНрдпреЗрдХ 3 рдмрд┐рдЯреНрд╕ рд▓реЗрддрд╛ рд╣реИ, рддреЛ рдЙрдиреНрд╣реЗрдВ рд╕реНрдЯреЛрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП 2 рдмрд╛рдЗрдЯреНрд╕ рд▓рдЧреЗрдВрдЧреЗ ( - рдЕрдкреНрд░рдпреБрдХреНрдд рдмрд┐рдЯреНрд╕ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ):


 bit 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 pixel AAABBBCCC - - - - - - - 

рдорд╣рддреНрд╡рдкреВрд░реНрдг рд░реВрдк рд╕реЗ, рдкрд┐рдХреНрд╕реЗрд▓ рд╕реА рдЦрд╛рд▓реА рдЬрдЧрд╣ рдХрд╛ рдПрдХ рдЧреБрдЪреНрдЫрд╛ рдирд╣реАрдВ рдЫреЛрдбрд╝рддрд╛ рд╣реИ; рдпрд╣ рджреЛ рдмрд╛рдЗрдЯреНрд╕ рдХреЗ рдмреАрдЪ рдлрдЯрд╛ рд╣реБрдЖ рд╣реИред рдЬрдм рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкрд┐рдХреНрд╕реЗрд▓ рдЬреЛрдбрд╝рдирд╛ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЙрдиреНрд╣реЗрдВ рдмрд╛рдЗрдЯ рд╕реАрдорд╛рдУрдВ рдХреЗ рд╕рд╛рдкреЗрдХреНрд╖ рдордирдорд╛рдиреЗ рдврдВрдЧ рд╕реЗ рддреИрдирд╛рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╕рдмрд╕реЗ рд╕рд░рд▓ рд╕рдорд╛рдзрд╛рди рдкреНрд░рддрд┐ рдкрд┐рдХреНрд╕реЗрд▓ рдирд┐рдмрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ 8 рдХреЛ 4 рд╕реЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдЖрдкрдХреЛ рдкреНрд░рддреНрдпреЗрдХ рдмрд╛рдЗрдЯ рдореЗрдВ рдмрд┐рд▓реНрдХреБрд▓ рджреЛ рдкрд┐рдХреНрд╕реЗрд▓ рд░рдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЗрд╕рд╕реЗ рдПрдЯрд▓рд╕ рдХрд╛ рдЖрдХрд╛рд░ рдПрдХ рддрд┐рд╣рд╛рдИ рдмрдврд╝ рдЬрд╛рдПрдЧрд╛, 68 рдмрд╛рдЗрдЯреНрд╕ рд╕реЗ 90 рдмрд╛рдЗрдЯреНрд╕ рддрдХ ред


  • рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдлрд╛рдЗрд▓ рдХреЛ palindrome рдХреЛрдбрд┐рдВрдЧ, рдЕрдВрддрд░рд╛рд▓ рдХреЛрдбрд┐рдВрдЧ рдФрд░ рдЕрдиреНрдп рд╕рдВрдкреАрдбрд╝рди рддрдХрдиреАрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдФрд░ рднреА рдЫреЛрдЯрд╛ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЕрдВрдХрдЧрдгрд┐рдд рдХреЛрдбрд┐рдВрдЧ рдХреА рддрд░рд╣, рд╣рдо рдЕрдЧрд▓реЗ рд▓реЗрдЦ рддрдХ рдЗрди рддрдХрдиреАрдХреЛрдВ рдХреЛ рд╕реНрдердЧрд┐рдд рдХрд░ рджреЗрддреЗ рд╣реИрдВред

рдмрд┐рдЯ рдмрдлрд░


рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, 3-рдмрд┐рдЯ рдореВрд▓реНрдпреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдореЗрдВ рдореМрд▓рд┐рдХ рд░реВрдк рд╕реЗ рдЕрд╕рдВрднрд╡ рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реИред рдЖрдкрдХреЛ рдмрд╕ рдЗрд╕ рдмрд╛рдд рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдмрд╛рдЗрдЯ рдХреЗ рдЕрдВрджрд░ рд╣рдо рдХрд┐рд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд▓рд┐рдЦ рд░рд╣реЗ рд╣реИрдВ рдпрд╛ рдкрдврд╝ рд░рд╣реЗ рд╣реИрдВред рдирд┐рдореНрди рд╕рд╛рдзрд╛рд░рдг рд╡рд░реНрдЧ 3-рдмрд┐рдЯ рдбреЗрдЯрд╛ рд╕реНрдЯреНрд░реАрдо рдмрд╛рдЗрдЯреНрд╕ рдХреЗ рдПрдХ рд╕рд░рдгреА рдореЗрдВ рдХрдирд╡рд░реНрдЯ рдХрд░рддрд╛ рд╣реИред


  • рдкрдардиреАрдпрддрд╛ рдХрд╛рд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП, рдХреЛрдб рдХреЛ JS рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдиреНрдп рднрд╛рд╖рд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╕рдорд╛рди рд╡рд┐рдзрд┐ рд╕рд╛рдорд╛рдиреНрдпреАрдХреГрдд рд╣реИред
  • рдХрдо рдмрд╛рдЗрдЯ рд╕реЗ рдЙрдЪреНрдЪ ( рд▓рд┐рдЯрд┐рд▓ рдПрдВрдбрд┐рдпрди ) рдХреЗ рд▓рд┐рдП рдкреНрд░рдпреБрдХреНрдд рдЖрджреЗрд╢

 class BitBuffer { constructor(bytes) { this.data = new Uint8Array(bytes); this.offset = 0; } write(value) { for (let i = 0; i < 3; ) { // bits remaining const remaining = 3 - i; // bit offset in the byte ie remainder of dividing by 8 const bit_offset = this.offset & 7; // byte offset for a given bit offset, ie divide by 8 const byte_offset = this.offset >> 3; // max number of bits we can write to the current byte const wrote = Math.min(remaining, 8 - bit_offset); // mask with the correct bit-width const mask = ~(0xff << wrote); // shift the bits we want to the start of the byte and mask off the rest const write_bits = value & mask; // destination mask to zero all the bits we're changing first const dest_mask = ~(mask << bit_offset); value >>= wrote; // write it this.data[byte_offset] = (this.data[byte_offset] & dest_mask) | (write_bits << bit_offset); // advance this.offset += wrote; i += wrote; } } to_string() { return Array.from(this.data, (byte) => ('0' + (byte & 0xff).toString(16)).slice(-2)).join(''); } }; 

рдЖрдЗрдП рдПрдЯрд▓рд╕ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рдФрд░ рдПрдирдХреЛрдб рдХрд░реЗрдВ:


 const PNG = require('png-js'); const fs = require('fs'); // this is our palette of colors const Palette = [ [0xff, 0xff, 0xff], [0xff, 0x00, 0x00], [0x00, 0xff, 0x00], [0x00, 0x00, 0xff], [0x00, 0xff, 0xff], [0xff, 0x00, 0xff], [0xff, 0xff, 0x00] ]; // given a color represented as [R, G, B], find the index in palette where that color is function find_palette_index(color) { const [sR, sG, sB] = color; for (let i = 0; i < Palette.length; i++) { const [aR, aG, aB] = Palette[i]; if (sR === aR && sG === aG && sB === aB) { return i; } } return -1; } // build the bit buffer representation function build(cb) { const data = fs.readFileSync('subpixels.png'); const image = new PNG(data); image.decode(function(pixels) { // we need 3 bits per pixel, so w*h*3 gives us the # of bits for our buffer // however BitBuffer can only allocate bytes, dividing this by 8 (bits for a byte) // gives us the # of bytes, but that division can result in 67.5 ... Math.ceil // just rounds up to 68. this will give the right amount of storage for any // size atlas. let result = new BitBuffer(Math.ceil((image.width * image.height * 3) / 8)); for (let y = 0; y < image.height; y++) { for (let x = 0; x < image.width; x++) { // 1D index as described above const index = (y * image.width + x) * 4; // extract the RGB pixel value, ignore A (alpha) const color = Array.from(pixels.slice(index, index + 3)); // write out 3-bit palette index to the bit buffer result.write(find_palette_index(color)); } } cb(result); }); } build((result) => console.log(result.to_string())); 

рдЬреИрд╕рд╛ рдХрд┐ рдЕрдкреЗрдХреНрд╖рд┐рдд рдерд╛, рдПрдЯрд▓рд╕ 68 рдмрд╛рдЗрдЯреНрд╕ рдлрд┐рдЯ рдмреИрдарддрд╛ рд╣реИ, рдЬреЛ рдкреАрдПрдирдЬреА рдлрд╝рд╛рдЗрд▓ рд╕реЗ 6 рдЧреБрдирд╛ рдЫреЛрдЯрд╛ рд╣реИред


( рдзреНрдпрд╛рди рджреЗрдВ: рд▓реЗрдЦрдХ рдХреБрдЫ рд╣рдж рддрдХ рдЕрд╕рднреНрдп рд╣реИ: рдЙрд╕рдиреЗ рдкреИрд▓реЗрдЯ рдФрд░ рдЫрд╡рд┐ рдЖрдХрд╛рд░ рдХреЛ рдирд╣реАрдВ рдмрдЪрд╛рдпрд╛, рдЬреЛ рдореЗрд░реЗ рдЕрдиреБрдорд╛рдиреЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдкреИрд▓реЗрдЯ рдЖрдХрд╛рд░ рдХреЗ рд╕рд╛рде 23 рдмрд╛рдЗрдЯреНрд╕ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА рдФрд░ рдЫрд╡рд┐ рдХрд╛ рдЖрдХрд╛рд░ 91 рдмрд╛рдЗрдЯреНрд╕ рддрдХ рдмрдврд╝рд╛ рджреЗрдЧрд╛ )


рдЕрдм рдЗрдореЗрдЬ рдХреЛ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдореЗрдВ рдмрджрд▓рддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдЖрдк рдЗрд╕реЗ рд╕реЛрд░реНрд╕ рдХреЛрдб рдореЗрдВ рдкреЗрд╕реНрдЯ рдХрд░ рд╕рдХреЗрдВред рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, to_string рд╡рд┐рдзрд┐ to_string : рдпрд╣ рдПрдХ рд╣реЗрдХреНрд╕рд╛рдбреЗрд╕рд┐рдорд▓ рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдмрд╛рдЗрдЯ рдХреА рд╕рд╛рдордЧреНрд░реА рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ to_string ред


 305000000c0328d6d4b24cb46d516d4ddab669926a0ddab651db76150060009c0285 e6a0752db59054655bd7b569d26a4ddba053892a003060400d232850b40a6b61ad00 

рд▓реЗрдХрд┐рди рдкрд░рд┐рдгрд╛рдореА рд╕реНрдЯреНрд░рд┐рдВрдЧ рдЕрднреА рднреА рдХрд╛рдлреА рд▓рдВрдмреА рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдордиреЗ рдЦреБрдж рдХреЛ 16 рд╡рд░реНрдгреЛрдВ рдХреА рд╡рд░реНрдгрдорд╛рд▓рд╛ рддрдХ рд╕реАрдорд┐рдд рдХрд░ рд▓рд┐рдпрд╛ рд╣реИред рдЖрдк рдЗрд╕реЗ рдмреЗрд╕ 64 рд╕реЗ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ рдХрдИ рдкрд╛рддреНрд░реЛрдВ рдХреЗ рдЪрд╛рд░ рдЧреБрдирд╛ рд╣реИрдВред


 to_string() { return Buffer.from(this.data).toString('base64'); } 

Base64 рдореЗрдВ, рдПрдЯрд▓рд╕ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:


 MFAAAAwDKNbUsky0bVFtTdq2aZJqDdq2Udt2FQBgAJwCheagdS21kFRlW9e1adJqTdugU4kqADBgQA0jKFC0CmthrQA= 

рдЗрд╕ рд▓рд╛рдЗрди рдХреЛ рдЬреЗрдПрд╕ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рд╣рд╛рд░реНрдбрдХреЛрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдЯреЗрдХреНрд╕реНрдЯ рдХреЛ рддреЗрдЬ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред


рд░реИрд╕реНрдЯрд░рд╛рдЗрдЬрд╝реЗрд╢рди


рд╕реНрдореГрддрд┐ рдХреЛ рдмрдЪрд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рдмрд╛рд░ рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рдЕрдХреНрд╖рд░ рдХреЛ рдбрд┐рдХреЛрдб рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред


 const Alphabet = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'; const Atlas = Uint8Array.from(Buffer.from('MFAAAAwDKNbUsky0bVFtTdq2aZJqDdq2Udt2FQBgAJwCheagdS21kFRlW9e1adJqTdugU4kqADBgQA0jKFC0CmthrQA=', 'base64')); const Palette = [ [0xff, 0xff, 0xff], [0xff, 0x00, 0x00], [0x00, 0xff, 0x00], [0x00, 0x00, 0xff], [0x00, 0xff, 0xff], [0xff, 0x00, 0xff], [0xff, 0xff, 0x00] ]; // at the given bit offset |offset| read a 3-bit value from the Atlas read = (offset) => { let value = 0; for (let i = 0; i < 3; ) { const bit_offset = offset & 7; const read = Math.min(3 - i, 8 - bit_offset); const read_bits = (Atlas[offset >> 3] >> bit_offset) & (~(0xff << read)); value |= read_bits << i; offset += read; i += read; } return value; }; // for a given glyph |g| unpack the palette indices for the 5 vertical pixels unpack = (g) => { return (new Uint8Array(5)).map((_, i) => read(Alphabet.length*3*i + Alphabet.indexOf(g)*3)); }; // for given glyph |g| decode the 1x5 vertical RGB strip decode = (g) => { const rgb = new Uint8Array(5*3); unpack(g).forEach((value, index) => rgb.set(Palette[value], index*3)); return rgb; } 

decode рдлрд╝рдВрдХреНрд╢рди рдПрдХ рдЪрд░рд┐рддреНрд░ рдХреЛ рдЗрдирдкреБрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рд▓реЗрддрд╛ рд╣реИ рдФрд░ рд╕реНрд░реЛрдд рдЫрд╡рд┐ рдореЗрдВ рд╕рдВрдмрдВрдзрд┐рдд рдХреЙрд▓рдо рд▓реМрдЯрд╛рддрд╛ рд╣реИред рдпрд╣рд╛рдВ рдЬреЛ рдкреНрд░рднрд╛рд╡рд╢рд╛рд▓реА рд╣реИ рд╡рд╣ рдпрд╣ рд╣реИ рдХрд┐ рдПрдХрд▓ рд╡рд░реНрдг рдХреЛ рдбрд┐рдХреЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ 5 рдмрд╛рдЗрдЯреНрд╕ рд▓рдЧрддреЗ рд╣реИрдВ, рд╕рд╛рде рд╣реА рд╕рд░рдгреА рдХреЗ рд╡рд╛рдВрдЫрд┐рдд рдЯреБрдХрдбрд╝реЗ рдХреЛ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП ~ 1.875 рдмрд╛рдЗрдЯреНрд╕, рдЕрд░реНрдерд╛рддреНред рдкреНрд░рддрд┐ рдЕрдХреНрд╖рд░ рдФрд╕рдд 6.875 ред рдпрджрд┐ рдЖрдк рд╡рд░реНрдгрдорд╛рд▓рд╛ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд░рдгреА рдФрд░ 36 рдмрд╛рдЗрдЯреНрд╕ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП 68 рдмрд╛рдЗрдЯреНрд╕ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рд╕реИрджреНрдзрд╛рдВрддрд┐рдХ рд░реВрдк рд╕реЗ рдЖрдк 128 рдмрд╛рдЗрдЯреНрд╕ рд░реИрдо рдХреЗ рд╕рд╛рде рдкрд╛рда рдХреЛ рдкреНрд░рд╕реНрддреБрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред


  • рдпрд╣ рд╕рдВрднрд╡ рд╣реИ рдпрджрд┐ рдЖрдк рд╕реА рдпрд╛ рдХреЛрдбрд╛рдВрддрд░рдХ рдореЗрдВ рдХреЛрдб рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрддреЗ рд╣реИрдВред рдЬреЗрдПрд╕ рдУрд╡рд░рд╣реЗрдб рдХреА рдкреГрд╖реНрдарднреВрдорд┐ рдХреЗ рдЦрд┐рд▓рд╛рдл, рдпрд╣ рдореИрдЪреЛрдВ рдкрд░ рдмрдЪрдд рд╣реИред

рдпрд╣ рдХреЗрд╡рд▓ рдЗрди рд╕реНрддрдВрднреЛрдВ рдХреЛ рдПрдХ рдПрдХрд▓ рдореЗрдВ рдЗрдХрдЯреНрдард╛ рдХрд░рдиреЗ рдФрд░ рдкрд╛рда рдХреЗ рд╕рд╛рде рдПрдХ рддрд╕реНрд╡реАрд░ рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдиреА рд╣реБрдИ рд╣реИред


 print = (t) => { const c = t.toUpperCase().replace(/[^\w\d ]/g, ''); const w = c.length * 2 - 1, h = 5, bpp = 3; // * 2 for whitespace const b = new Uint8Array(w * h * bpp); [...c].forEach((g, i) => { if (g !== ' ') for (let y = 0; y < h; y++) { // copy each 1x1 pixel row to the the bitmap b.set(decode(g).slice(y * bpp, y * bpp + bpp), (y * w + i * 2) * bpp); } }); return {w: w, h: h, data: b}; }; 

рдпрд╣ рд╕рдмрд╕реЗ рдЫреЛрдЯрд╛ рд╕рдВрднрд╡ рдлрд╝реЙрдиреНрдЯ рд╣реЛрдЧрд╛ред


 const fs = require('fs'); const result = print("Breaking the physical limits of fonts"); fs.writeFileSync(`${result.w}x${result.h}.bin`, result.data); 

рдПрдХ рдкрдардиреАрдп рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдЫрд╡рд┐ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдереЛрдбрд╝рд╛ рд╕рд╛ рдЗрдореЗрдЬрдореИрдЬрд┐рдХ рдЬреЛрдбрд╝реЗрдВ:


 # convert -size 73x5 -depth 8 rgb:73x5.bin done.png 

рдФрд░ рдпрд╣рд╛рдБ рдЕрдВрддрд┐рдо рдкрд░рд┐рдгрд╛рдо рд╣реИ:



рдпрд╣ рднреА 12 рдЧреБрдирд╛ рдмрдврд╝рд╛ рд╣реИ:



рдпрд╣ рдЦрд░рд╛рдм рдХреИрд▓рд┐рдмреНрд░реЗрдЯреЗрдб рдореЙрдирд┐рдЯрд░ рдореИрдХреНрд░реЛ рд╕реЗ рд╢реВрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:



рдФрд░ рдЕрдВрдд рдореЗрдВ, рдпрд╣ рдореЙрдирд┐рдЯрд░ рдкрд░ рдмреЗрд╣рддрд░ рд╣реИ:


Source: https://habr.com/ru/post/hi460697/


All Articles