/* convert a float image to a consecutive array a bit stupid but well */ UBYTE_image* image_to_arraytype( image_t* img ) { UBYTE_image* res = NEW(UBYTE_image); *res = empty_image(UBYTE,img->width,img->height); for(int j=0; j<img->height; j++) for(int i=0; i<img->width; i++) res->pixels[i+j*res->tx] = (UBYTE)img->data[i+j*img->stride]; return res; }
void close_image(struct cr_img *img) { if (lazy_image(img)) { /* * Remove the image file if it's there so that * subsequent restore doesn't read wrong or fake * data from it. */ unlinkat(get_service_fd(IMG_FD_OFF), img->path, 0); xfree(img->path); } else if (!empty_image(img)) bclose(&img->_x); xfree(img); }
Magick::Image friendGrid::prettyPrint() { Magick::Image empty_image(Magick::Geometry(m_nWidth, m_nLength), "white"); for (int iii = 0; iii < m_nLength; iii++) // For every row... { for (int bbb = 0; bbb < m_nWidth; bbb++) // For every item in that row... { if ((*m_personArray[iii][bbb]).getX() == 0 && (*m_personArray[iii][bbb]).getY() == 0) // If it's sam... { empty_image.pixelColor(bbb,iii,Magick::Color("red")); } else if ((*m_personArray[iii][bbb]).canSeeSam()) // If they can see Sam... { empty_image.pixelColor(bbb,iii,Magick::Color("green")); } else { empty_image.pixelColor(bbb,iii,Magick::Color("blue")); } } } return empty_image; }
void InitFreeType(){ PrintToLog("INFO: Initializing FreeType."); FT_Library ft; FT_Face face; if(FT_Init_FreeType(&ft)) { PrintToLog("ERROR: Could not init FreeType library!"); return; } // TODO - load from some configuration file... const char *font_filename = "/Orbitron Bold.otf"; PHYSFS_File *file; intmax_t length; uint8_t *font_buffer; file = PHYSFS_openRead(font_filename); if(!file){ PrintToLog("ERROR: unable to open Font File: \"%s\"", font_filename); return; } length = PHYSFS_fileLength(file); font_buffer = new uint8_t[length]; PHYSFS_read(file, font_buffer, 1, length); PHYSFS_close(file); FT_Error err = FT_New_Memory_Face(ft, font_buffer, length, 0, &face); if(err){ PrintToLog("ERROR: Could not load font \"%s\"! error code %x!", font_filename, err); delete[] font_buffer; return; } FT_Set_Pixel_Sizes(face, 0, FONT_SIZE); FT_GlyphSlot g = face->glyph; int width = 0; int height = 0; for(unsigned char c = FONT_FIRST_CHAR; c <= FONT_LAST_CHAR; c++) { if(FT_Load_Char(face, c, FT_LOAD_RENDER)) { PrintToLog("WARNING: Loading character %c failed!", c); continue; } width += g->bitmap.width + 1; height = std::max(height, int(g->bitmap.rows)); } main_atlas.width = width; glGenTextures(1, &main_atlas.texture); glBindTexture(GL_TEXTURE_2D, main_atlas.texture); glPixelStorei(GL_UNPACK_ALIGNMENT, 1); std::vector<GLubyte> empty_image(width * height, 0); glTexImage2D(GL_TEXTURE_2D, 0, GL_ALPHA, width, height, 0, GL_ALPHA, GL_UNSIGNED_BYTE, &empty_image[0]); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); uint32_t x = 0; for(unsigned char i = FONT_FIRST_CHAR; i <= FONT_LAST_CHAR; i++) { if(FT_Load_Char(face, i, FT_LOAD_RENDER)) continue; glTexSubImage2D(GL_TEXTURE_2D, 0, x, 0, g->bitmap.width, g->bitmap.rows, GL_ALPHA, GL_UNSIGNED_BYTE, g->bitmap.buffer); main_atlas.characters[i].advance.x = g->advance.x >> 6; main_atlas.characters[i].advance.y = g->advance.y >> 6; main_atlas.characters[i].width = g->bitmap.width; main_atlas.characters[i].rows = g->bitmap.rows; main_atlas.characters[i].left = g->bitmap_left; main_atlas.characters[i].top = g->bitmap_top; main_atlas.characters[i].x = (float)x / (float)width; x += g->bitmap.width + 1; } PrintToLog("INFO: Created character atlas size %ix%i", width,height); FT_Done_Face(face); delete[] font_buffer; // TODO - perhaps leave this open for loading other fonts and close in a GarbageCollect() function? FT_Done_FreeType(ft); }