| Код | bool TakeScreenshot(char* szFileName, int m_nWidth, int m_nHeight) { QGLImage Bitmap; unsigned char* ImageData; char szFilename[256];
CreateDirectory(szFileName, NULL); sprintf(szFilename, "%s/screen%i.bmp", szFileName, numScreen);
ImageData= new unsigned char [m_nWidth*m_nHeight*3];
glReadPixels(-1, -1, m_nWidth, m_nHeight, GL_RGB, GL_UNSIGNED_BYTE, ImageData);//я вот за эту говорил.. т.е. поиши сотвествующую функцию в директе
SaveBMP(szFilename, m_nWidth, m_nHeight, ImageData); numScreen++;
delete[] ImageData; return true; }
|
ну и собственно сохраняем в BMP формат Data - это указатель на данные нашей картинки
| Код | bool QGLImage::SaveBMP(char* szFilename, unsigned int m_nWidth, unsigned int m_nHeight, unsigned char* Data) { FILE* pFile; BITMAPFILEHEADER bitmapFileHeader; BITMAPINFOHEADER bitmapInfoHeader; unsigned char TempRGB; unsigned int i;
pFile = fopen(szFilename, "wb"); if (!pFile) return false;
bitmapFileHeader.bfSize = sizeof(BITMAPFILEHEADER); bitmapFileHeader.bfType = 0x4D42; bitmapFileHeader.bfReserved1 = 0; bitmapFileHeader.bfReserved2 = 0; bitmapFileHeader.bfOffBits = sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER); bitmapInfoHeader.biSize = sizeof(BITMAPINFOHEADER); bitmapInfoHeader.biPlanes = 1; bitmapInfoHeader.biBitCount = 24; bitmapInfoHeader.biCompression = BI_RGB; bitmapInfoHeader.biSizeImage = m_nWidth*m_nHeight*3; bitmapInfoHeader.biXPelsPerMeter = 0; bitmapInfoHeader.biYPelsPerMeter = 0; bitmapInfoHeader.biClrUsed = 0; bitmapInfoHeader.biClrImportant = 0; bitmapInfoHeader.biWidth = m_nWidth; bitmapInfoHeader.biHeight = m_nHeight;
for( i=0; i<bitmapInfoHeader.biSizeImage; i+=3 ) { TempRGB = Data[i]; Data[i] = Data[i+2]; Data[i+2] = TempRGB; }
fwrite(&bitmapFileHeader, 1, sizeof(BITMAPFILEHEADER), pFile); fwrite(&bitmapInfoHeader, 1, sizeof(BITMAPINFOHEADER), pFile); fwrite(Data, 1, bitmapInfoHeader.biSizeImage, pFile);
fclose(pFile); return true; }
|
|