http://www.gamedev.net/community/forums/topic.asp?topic_id=350104윈도우에는 화면 캡쳐하는 기능이 있지만 그림 품질이 얼마나 차이가 날지는 모르지만 raw데이터로 tga로 보내는 거니 화면 캡쳐보다 품질이 더 좋지 않을까 생각된다(같을수도 있지만).
내 나쁜 기억력이나 다른 사람에게 도움이 되었으면 한다 ^^;;
// snapshot to tga void glcanvas::SnapShotToFile(String^ file_name) { pin_ptr filename = PtrToStringChars(file_name); int windowWidth = v3d->GetCamera().width(); int windowHeight = v3d->GetCamera().height(); unsigned char *outputImage = 0; // Allocate the neccessary memory. outputImage = (unsigned char*)malloc(windowWidth * windowHeight * 3); // Clear the variable. memset(outputImage, 0, windowWidth * windowHeight * 3); glPixelStorei(GL_PACK_ALIGNMENT, 1); glPixelStorei(GL_UNPACK_ALIGNMENT, 1); glReadPixels(0, 0, windowWidth, windowHeight, GL_RGB, GL_UNSIGNED_BYTE, outputImage); FILE *filePtr = _wfopen(filename, L"wb"); if (!filePtr) return; // To save a screen shot is just like reading in a image. All you do // is the opposite. Istead of calling fread to read in data you call // fwrite to save it. FILE *pFile; // The file pointer. unsigned char uselessChar; // used for useless char. short int uselessInt; // used for useless int. unsigned char imageType; // Type of image we are saving. int index; // used with the for loop. unsigned char bits; // Bit depth. long Size; // Size of the picture. int colorMode; unsigned char tempColors; // Open file for output. pFile = _wfopen(filename, L"wb"); // Check if the file opened or not. if(!pFile) { fclose(pFile); return; } // Set the image type, the color mode, and the bit depth. imageType = 2; colorMode = 3; bits = 24; // Set these two to 0. uselessChar = 0; uselessInt = 0; // Write useless data. fwrite(&uselessChar, sizeof(unsigned char), 1, pFile); fwrite(&uselessChar, sizeof(unsigned char), 1, pFile); // Now image type. fwrite(&imageType, sizeof(unsigned char), 1, pFile); // Write useless data. fwrite(&uselessInt, sizeof(short int), 1, pFile); fwrite(&uselessInt, sizeof(short int), 1, pFile); fwrite(&uselessChar, sizeof(unsigned char), 1, pFile); fwrite(&uselessInt, sizeof(short int), 1, pFile); fwrite(&uselessInt, sizeof(short int), 1, pFile); // Write the size that you want. fwrite(&windowWidth, sizeof(short int), 1, pFile); fwrite(&windowHeight, sizeof(short int), 1, pFile); fwrite(&bits, sizeof(unsigned char), 1, pFile); // Write useless data. fwrite(&uselessChar, sizeof(unsigned char), 1, pFile); // Get image size. Size = windowWidth * windowHeight * colorMode; // Now switch image from RGB to BGR. for(index = 0; index < Size; index += colorMode) { tempColors = outputImage[index]; outputImage[index] = outputImage[index + 2]; outputImage[index + 2] = tempColors; } // Finally write the image. fwrite(outputImage, sizeof(unsigned char), Size, pFile); // close the file. fclose(pFile); free(outputImage); }