#define WIN32_LEAN_AND_MEAN #include #include #include #include "dd.h" #include "ddpalette.h" #include "ddsurface.h" #include "lodepng.h" BOOL ss_take_screenshot(struct IDirectDrawSurfaceImpl *src) { if (!src || !src->palette || !dds_GetBuffer(src)) return FALSE; int i; char title[128]; char filename[128]; char str_time[64]; time_t t = time(NULL); strncpy(title, g_ddraw->title, sizeof(g_ddraw->title)); for (i = 0; ipalette->data_rgb[i]; lodepng_palette_add(&state.info_png.color, c->rgbRed, c->rgbGreen, c->rgbBlue, 255); lodepng_palette_add(&state.info_raw, c->rgbRed, c->rgbGreen, c->rgbBlue, 255); } state.info_png.color.colortype = LCT_PALETTE; state.info_png.color.bitdepth = 8; state.info_raw.colortype = LCT_PALETTE; state.info_raw.bitdepth = 8; state.encoder.auto_convert = 0; unsigned int error = lodepng_encode(&png, &pngsize, dds_GetBuffer(src), src->width, src->height, &state); if (!error) lodepng_save_file(png, pngsize, filename); lodepng_state_cleanup(&state); free(png); return !error; }