C отображение пикселей карты шрифтов на экране

#c #fonts #sdl

Вопрос:

В настоящее время я изучаю карты шрифтов и растровые изображения, я хотел бы иметь возможность взять эту карту шрифтов и вывести ее на экран в пикселях.

 unsigned char glyph_a[][8] = 
{
  {0x00, 0x00, 0x3c, 0x02, 0x3e, 0x42, 0x3e, 0x00},
}
 

Функция, которую я пытаюсь использовать для этого, такова

 void draw_Glyph(char *glyph_a)
{
 int x, y;
 int set;
 for (x=0; x < 8; x  )
 {
  for (y=0; y < 8; y  )
  {
    set = glyph_a[x] amp; 1 << y;
  }
 }
}
 

SDL предоставляет функцию SDL_RenderDrawPoint, которая принимает средство визуализации и значения x и y для определения местоположения.

В C есть графическая библиотека для чего-то под названием putpixel (), где она также просто принимает значения x и y пикселя, а также принимает цвет в качестве последнего аргумента.

Я не уверен, какую функцию мне следует использовать для вывода этого в пиксели конкретно. Любой совет был бы очень признателен.

Комментарии:

1. Функция putpixel() является частью древнего <graphics.h> заголовка и никоим образом не связана с SDL. Вы должны использовать SDL_RenderDrawPoint() , если хотите нарисовать пиксель на a SDL_Renderer . Кроме того, если вы хотите изменить цвет отрисовываемого пикселя, перед вызовом вызовите функцию SDL_SetRenderDrawColor () SDL_RenderDrawPoint() .

2. @Ruks Итак, как получить значения X, Y для функции SDL_RenderDrawPoint (), должен ли я сделать эту функцию set_x и set_y, чтобы получить результаты, которые я ищу? Ценю вашу помощь!

Ответ №1:

Вы можете изменить свою draw_Glyph() функцию на эту:

 struct Color {
    Uint8 r, g, b, a;
}

Color create_Color(Uint8 r, Uint8 g, Uint8 b, Uint8 a) {
    Color clr;
    clr.r = r;
    clr.g = g;
    clr.b = b;
    clr.a = a;
    return clr;
}

void draw_Glyph(SDL_Renderer* renderer, /* Renderer instance to draw the glyph on */
                char* glyph,            /* The glyph to display */
                Color on_color,         /* Color to use for 'on' bits in the glyph */
                Color off_color         /* Color to use for 'off' bits in the glyph */
                )
{
    for (int y = 0; y < 8; y  )
        for (int x = 0; x < 8; x  ) {
            // Check if the bit is 'on' or 'off' and set the color of the pixel accordingly
            if (glyph[y] amp; (1 << (7 - x)))
                SDL_SetRenderDrawColor(renderer, on_color.r, on_color.g, on_color.b, on_color.a);
            else
                SDL_SetRenderDrawColor(renderer, off_color.r, off_color.g, off_color.b, off_color.a);
            // Draw the point where it is needed
            SDL_RenderDrawPoint(renderer, x, y);
        }
}
 

Тогда вы можете использовать его вот так:

 const Color on_clr = create_Color(255, 255, 255, 255); // WHITE
const Color off_clr = create_Color(0, 0, 0, 255);      // BLACK
draw_Glyph(renderer, *glyph_a, on_clr, off_clr);
 

Обратите внимание, что вам нужно передать SDL_Renderer* экземпляр, чтобы использовать его.

Вы можете найти минимальный пример того, как создать SDL_Renderer веб-сайт на SDL.