#include "Font.h" #include namespace charcoal { image_loader::ImageRGBA Font::get_text_image(const std::string& text) { image_loader::ImageRGBA output; std::map image_map; output.width = 0; output.height = 0; for (std::string::size_type i = 0; i < text.size(); ++i) { // Load the image for the character auto character_image = image_map.find(text[i]); if (character_image == image_map.end()) { auto insertion_result = image_map.emplace(text[i], get_character(text[i])); character_image = insertion_result.first; } output.width += character_image->second.width; output.height = character_image->second.height > output.height ? character_image->second.height : output.height; } // Allocate the vector output.data.resize(output.width * output.height * 4); // * 4 for R, G, B, A channels int character_offset = 0; for (std::string::size_type i = 0; i < text.size(); ++i) { const image_loader::ImageRGBA& character_image = image_map.find(text[i])->second; for (unsigned int y = 0; y < character_image.height; ++y) { for (unsigned int x = 0; x < character_image.width; ++x) { unsigned char red; unsigned char green; unsigned char blue; unsigned char alpha; character_image.get_pixel(x, y, red, green, blue, alpha); output.set_pixel(x + character_offset, y, red, green, blue, alpha); } } character_offset += character_image.width; } return output; } }