void L1_GetSaveGameImage() { int width = 250, height = 188; Bitmap *screenshot; int dataSize; lua_Object param = lua_getparam(1); if (!lua_isstring(param)) { lua_pushnil(); return; } const char *filename = lua_getstring(param); SaveGame *savedState = SaveGame::openForLoading(filename); if (!savedState || savedState->saveVersion() != SaveGame::SAVEGAME_VERSION) { lua_pushnil(); return; } dataSize = savedState->beginSection('SIMG'); uint16 *data = new uint16[dataSize / 2]; for (int l = 0; l < dataSize / 2; l++) { data[l] = savedState->readLEUint16(); } screenshot = new Bitmap((char *)data, width, height, 16, "screenshot"); if (screenshot) { lua_pushusertag(screenshot->getId(), MKTAG('V','B','U','F')); } else { lua_pushnil(); warning("Could not restore screenshot from file"); delete savedState; return; } savedState->endSection(); delete savedState; }
void Lua_V2::ThumbnailFromFile() { lua_Object texIdObj = lua_getparam(1); lua_Object filenameObj = lua_getparam(2); if (!lua_isnumber(texIdObj) || !lua_isstring(filenameObj)) { warning("Lua_V2::ThumbnailFromFile: wrong parameters"); return; } int index = (int)lua_getnumber(texIdObj); const char *filename = lua_getstring(filenameObj); int width = 256, height = 128; Bitmap *screenshot; SaveGame *savedState = SaveGame::openForLoading(filename); if (!savedState || !savedState->isCompatible()) { delete savedState; warning("Lua_V2::ThumbnailFromFile: savegame %s not compatible", filename); lua_pushnil(); return; } int dataSize = savedState->beginSection('SIMG'); if (dataSize != width * height * 2) { warning("Lua_V2::ThumbnailFromFile: savegame uses unexpected thumbnail size, ignore it"); lua_pushnil(); delete savedState; return; } uint16 *data = new uint16[dataSize / 2]; for (int l = 0; l < dataSize / 2; l++) { data[l] = savedState->readLEUint16(); } Graphics::PixelBuffer buf(Graphics::createPixelFormat<565>(), (byte *)data); screenshot = new Bitmap(buf, width, height, "screenshot"); if (!screenshot) { lua_pushnil(); warning("Lua_V2::ThumbnailFromFile: Could not restore screenshot from file %s", filename); delete[] data; delete savedState; return; } screenshot->_data->convertToColorFormat(Graphics::PixelFormat(4, 8, 8, 8, 8, 0, 8, 16, 24)); g_driver->createSpecialtyTexture(index, screenshot->getData(0).getRawBuffer(), width, height); delete[] data; savedState->endSection(); delete savedState; pushbool(true); }
void Lua_V1::GetSaveGameImage() { int width = 250, height = 188; Bitmap *screenshot; int dataSize; lua_Object param = lua_getparam(1); if (!lua_isstring(param)) { lua_pushnil(); return; } const char *filename = lua_getstring(param); SaveGame *savedState = SaveGame::openForLoading(filename); if (!savedState || !savedState->isCompatible()) { delete savedState; lua_pushnil(); return; } dataSize = savedState->beginSection('SIMG'); uint16 *data = new uint16[dataSize / 2]; for (int l = 0; l < dataSize / 2; l++) { data[l] = savedState->readLEUint16(); } Graphics::PixelBuffer buf(Graphics::createPixelFormat<565>(), (byte *)data); screenshot = new Bitmap(buf, width, height, "screenshot"); delete[] data; if (screenshot) { lua_pushusertag(screenshot->getId(), MKTAG('V','B','U','F')); } else { lua_pushnil(); warning("Could not restore screenshot from file"); delete savedState; return; } savedState->endSection(); delete savedState; }