void saveSkin(void) { unsigned char *img; img = (unsigned char*)malloc(ImgSize * ImgSize * 3); if (img == NULL) { return; } glPixelStorei(GL_PACK_ROW_LENGTH, 0); glPixelStorei(GL_PACK_ALIGNMENT, 4); glReadBuffer(GL_FRONT); glReadPixels(0, 0, ImgSize, ImgSize, GL_RGB, GL_UNSIGNED_BYTE, (GLvoid*)img); GfImgWritePng(img, SkinFileName, ImgSize, ImgSize); free(img); }
/** Save a screen shot in png format. @ingroup screen */ void GfuiScreenShot(void * /* notused */) { unsigned char *img; const int BUFSIZE = 1024; char buf[BUFSIZE]; struct tm *stm; time_t t; int sw, sh, vw, vh; char path[BUFSIZE]; snprintf(path, BUFSIZE, "%sscreenshots", GetLocalDir()); // Ensure that screenshot directory exists. if (GfCreateDir(path) == GF_DIR_CREATED) { GfScrGetSize(&sw, &sh, &vw, &vh); img = (unsigned char*)malloc(vw * vh * 3); if (img == NULL) { return; } glPixelStorei(GL_PACK_ROW_LENGTH, 0); glPixelStorei(GL_PACK_ALIGNMENT, 1); glReadBuffer(GL_FRONT); glReadPixels((sw-vw)/2, (sh-vh)/2, vw, vh, GL_RGB, GL_UNSIGNED_BYTE, (GLvoid*)img); t = time(NULL); stm = localtime(&t); snprintf(buf, BUFSIZE, "%s/torcs-%4d%02d%02d%02d%02d%02d.png", path, stm->tm_year+1900, stm->tm_mon+1, stm->tm_mday, stm->tm_hour, stm->tm_min, stm->tm_sec); GfImgWritePng(img, buf, vw, vh); free(img); } }
static void reCapture(void) { unsigned char *img; int sw, sh, vw, vh; tRmMovieCapture *capture = &(ReInfo->movieCapture); GfScrGetSize(&sw, &sh, &vw, &vh); img = (unsigned char*)malloc(vw * vh * 3); if (img == NULL) { return; } glPixelStorei(GL_PACK_ROW_LENGTH, 0); glPixelStorei(GL_PACK_ALIGNMENT, 1); glReadBuffer(GL_FRONT); glReadPixels((sw-vw)/2, (sh-vh)/2, vw, vh, GL_RGB, GL_UNSIGNED_BYTE, (GLvoid*)img); sprintf(buf, "%s/torcs-%4.4d-%8.8d.png", capture->outputBase, capture->currentCapture, capture->currentFrame++); GfImgWritePng(img, buf, vw, vh); free(img); }