儲存OpenGL視窗每一幀程式碼段(freeimage庫)
阿新 • • 發佈:2018-11-11
儲存OpenGL視窗每一幀程式碼段(freeimage庫)
char screenshotOrder[10]; sprintf_s(screenshotOrder, "%05d", screenshotNum); string screenshotName = screenshotOrder; screenshotName = "renderOutputs/anim" + screenshotName + ".bmp";//檔名 //設定長寬,需要修改其位置數值 unsigned char *mpixels = new unsigned char[900 * 900 * 4]; glReadBuffer(GL_FRONT); glReadPixels(0, 0, 900, 900, GL_RGBA, GL_UNSIGNED_BYTE, mpixels); glReadBuffer(GL_BACK); for (int i = 0; i < (int)900 * 900 * 4; i += 4){ mpixels[i] ^= mpixels[i + 2] ^= mpixels[i] ^= mpixels[i + 2]; } FIBITMAP* bitmap = FreeImage_Allocate(900, 900, 32, 8, 8, 8); for (int y = 0; y < FreeImage_GetHeight(bitmap); y++) { BYTE *bits = FreeImage_GetScanLine(bitmap, y); for (int x = 0; x < FreeImage_GetWidth(bitmap); x++) { bits[0] = mpixels[(y * 900 + x) * 4 + 0];//900為長 bits[1] = mpixels[(y * 900 + x) * 4 + 1]; bits[2] = mpixels[(y * 900 + x) * 4 + 2]; bits[3] = 255; bits += 4; } } bool bSuccess = FreeImage_Save(FIF_PNG, bitmap, screenshotName.c_str(), PNG_DEFAULT); if (bSuccess == false) cout << "圖片儲存失敗" << endl; FreeImage_Unload(bitmap); delete[] mpixels; screenshotNum++;//設定一個全域性變數第幾幀