<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="http://www.programmingexamples.net/w/skins/common/feed.css?303"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>http://www.programmingexamples.net/w/index.php?action=history&amp;feed=atom&amp;title=OpenGL%2FScreenshot</id>
		<title>OpenGL/Screenshot - Revision history</title>
		<link rel="self" type="application/atom+xml" href="http://www.programmingexamples.net/w/index.php?action=history&amp;feed=atom&amp;title=OpenGL%2FScreenshot"/>
		<link rel="alternate" type="text/html" href="http://www.programmingexamples.net/w/index.php?title=OpenGL/Screenshot&amp;action=history"/>
		<updated>2026-05-25T13:34:09Z</updated>
		<subtitle>Revision history for this page on the wiki</subtitle>
		<generator>MediaWiki 1.23.5</generator>

	<entry>
		<id>http://www.programmingexamples.net/w/index.php?title=OpenGL/Screenshot&amp;diff=362&amp;oldid=prev</id>
		<title>Daviddoria: Created page with 'Requires VXL.  ==Test.cxx== &lt;source lang=&quot;cpp&quot;&gt; #include &lt;iostream&gt; #include &lt;cstdlib&gt; //for exit()  #include &lt;GL/glut.h&gt;  #include &lt;vil/vil_rgb.h&gt; #include &lt;vil/vil_load.h&gt; #inc…'</title>
		<link rel="alternate" type="text/html" href="http://www.programmingexamples.net/w/index.php?title=OpenGL/Screenshot&amp;diff=362&amp;oldid=prev"/>
				<updated>2010-11-24T00:47:22Z</updated>
		
		<summary type="html">&lt;p&gt;Created page with &amp;#039;Requires VXL.  ==Test.cxx== &amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt; #include &amp;lt;iostream&amp;gt; #include &amp;lt;cstdlib&amp;gt; //for exit()  #include &amp;lt;GL/glut.h&amp;gt;  #include &amp;lt;vil/vil_rgb.h&amp;gt; #include &amp;lt;vil/vil_load.h&amp;gt; #inc…&amp;#039;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;Requires VXL.&lt;br /&gt;
&lt;br /&gt;
==Test.cxx==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
#include &amp;lt;cstdlib&amp;gt; //for exit()&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;GL/glut.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;vil/vil_rgb.h&amp;gt;&lt;br /&gt;
#include &amp;lt;vil/vil_load.h&amp;gt;&lt;br /&gt;
#include &amp;lt;vil/vil_save.h&amp;gt;&lt;br /&gt;
#include &amp;lt;vil/vil_image_view.h&amp;gt;&lt;br /&gt;
#include &amp;lt;vil/vil_convert.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#include &amp;quot;Screenshot.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
using namespace std;&lt;br /&gt;
&lt;br /&gt;
void display(void);&lt;br /&gt;
void ProcessKeyboard(unsigned char key, int x, int y);&lt;br /&gt;
void DrawCube();&lt;br /&gt;
void DrawSizedCube(const float s);&lt;br /&gt;
void polygon(int a, int b, int c , int d);&lt;br /&gt;
void LookAt();&lt;br /&gt;
&lt;br /&gt;
const unsigned int Width = 200;&lt;br /&gt;
const unsigned int Height = 100;&lt;br /&gt;
&lt;br /&gt;
int main(int argc, char *argv[])&lt;br /&gt;
{&lt;br /&gt;
	cout &amp;lt;&amp;lt; &amp;quot;OpenGL&amp;quot; &amp;lt;&amp;lt; endl;&lt;br /&gt;
&lt;br /&gt;
	glutInit(&amp;amp;argc, argv);&lt;br /&gt;
	glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);&lt;br /&gt;
	glutInitWindowSize(Width, Height);&lt;br /&gt;
	glutInitWindowPosition(0, 0);&lt;br /&gt;
&lt;br /&gt;
	//setup the main window&lt;br /&gt;
	glutCreateWindow(&amp;quot;OpenGL Example&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
	glutDisplayFunc(display);&lt;br /&gt;
	glutKeyboardFunc(ProcessKeyboard);&lt;br /&gt;
&lt;br /&gt;
	glutMainLoop();&lt;br /&gt;
	return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void display(void)&lt;br /&gt;
{&lt;br /&gt;
	glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);&lt;br /&gt;
	glEnable(GL_DEPTH_TEST);&lt;br /&gt;
&lt;br /&gt;
	LookAt();&lt;br /&gt;
	DrawCube();&lt;br /&gt;
&lt;br /&gt;
	glutSwapBuffers();&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void ProcessKeyboard(unsigned char key, int x, int y)&lt;br /&gt;
{&lt;br /&gt;
	if (key == 27) //escape&lt;br /&gt;
	{&lt;br /&gt;
		exit(0);&lt;br /&gt;
	}&lt;br /&gt;
	else if(key == 'q')&lt;br /&gt;
	{&lt;br /&gt;
		exit(0);&lt;br /&gt;
	}&lt;br /&gt;
	else if(key == 's')&lt;br /&gt;
	{&lt;br /&gt;
		cout &amp;lt;&amp;lt; &amp;quot;Screenshot.&amp;quot; &amp;lt;&amp;lt; endl;&lt;br /&gt;
		Screenshot(&amp;quot;Test.jpg&amp;quot;);&lt;br /&gt;
		//ScreenshotFixed(&amp;quot;Fixed.jpg&amp;quot;);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	display();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void DrawSizedCube(const float s)&lt;br /&gt;
{&lt;br /&gt;
	glPushMatrix();&lt;br /&gt;
		glScalef(s,s,s);&lt;br /&gt;
		DrawCube();&lt;br /&gt;
	glPopMatrix();&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void DrawCube()&lt;br /&gt;
{&lt;br /&gt;
	//back&lt;br /&gt;
	glColor3f(1.0f, 0.0f, 0.0f);	// Color Red&lt;br /&gt;
	polygon(0,3,2,1);&lt;br /&gt;
&lt;br /&gt;
	//top&lt;br /&gt;
	glColor3f(0.0f,1.0f,0.0f);	// Color Green&lt;br /&gt;
	polygon(2,3,7,6);&lt;br /&gt;
&lt;br /&gt;
	//left&lt;br /&gt;
	glColor3f(0.0f, 0.0f, 1.0f);	// Color Blue&lt;br /&gt;
	polygon(0,4,7,3);&lt;br /&gt;
&lt;br /&gt;
	//right&lt;br /&gt;
	glColor3f(1.0f,1.0f,0.0f);	// Color Yellow&lt;br /&gt;
	polygon(1,2,6,5);&lt;br /&gt;
&lt;br /&gt;
	//front&lt;br /&gt;
	glColor3f(0.0f,1.0f,1.0f);	// Color Cyan&lt;br /&gt;
	polygon(4,5,6,7);&lt;br /&gt;
&lt;br /&gt;
	//bottom&lt;br /&gt;
	glColor3f(1.0f,0.0f,1.0f);	// Color Magenta&lt;br /&gt;
	polygon(0,1,5,4);&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
GLfloat vertices[][3] = {{-1.0,-1.0,-1.0},{1.0,-1.0,-1.0},&lt;br /&gt;
		{1.0,1.0,-1.0}, {-1.0,1.0,-1.0}, {-1.0,-1.0,1.0},&lt;br /&gt;
{1.0,-1.0,1.0}, {1.0,1.0,1.0}, {-1.0,1.0,1.0}};&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void polygon(int a, int b, int c , int d)&lt;br /&gt;
{&lt;br /&gt;
	glBegin(GL_QUADS);&lt;br /&gt;
	glVertex3fv(vertices[a]);&lt;br /&gt;
	glVertex3fv(vertices[b]);&lt;br /&gt;
	glVertex3fv(vertices[c]);&lt;br /&gt;
	glVertex3fv(vertices[d]);&lt;br /&gt;
	glEnd();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void LookAt()&lt;br /&gt;
{&lt;br /&gt;
	glMatrixMode(GL_PROJECTION);&lt;br /&gt;
	glLoadIdentity();&lt;br /&gt;
	gluPerspective(70, 1, 1, 100);&lt;br /&gt;
&lt;br /&gt;
	glMatrixMode(GL_MODELVIEW);&lt;br /&gt;
	glLoadIdentity();&lt;br /&gt;
&lt;br /&gt;
	gluLookAt(3, 5, 5, 0, 0, 0, 0, 1, 0);&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Screenshot.cxx==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;GL/glut.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;vil/vil_rgb.h&amp;gt;&lt;br /&gt;
#include &amp;lt;vil/vil_load.h&amp;gt;&lt;br /&gt;
#include &amp;lt;vil/vil_save.h&amp;gt;&lt;br /&gt;
#include &amp;lt;vil/vil_image_view.h&amp;gt;&lt;br /&gt;
#include &amp;lt;vil/vil_convert.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;vbl/vbl_array_3d.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
using namespace std;&lt;br /&gt;
&lt;br /&gt;
void Screenshot(const string &amp;amp;filename)&lt;br /&gt;
{&lt;br /&gt;
  const unsigned int Width = glutGet(GLUT_WINDOW_WIDTH);&lt;br /&gt;
  const unsigned int Height = glutGet(GLUT_WINDOW_HEIGHT);&lt;br /&gt;
&lt;br /&gt;
  vil_image_view&amp;lt;vil_rgb&amp;lt;vxl_byte&amp;gt; &amp;gt; RGBImage(Width, Height, 1, 1);&lt;br /&gt;
&lt;br /&gt;
  vbl_array_3d&amp;lt;GLubyte&amp;gt; buffer(Height,Width,3);&lt;br /&gt;
&lt;br /&gt;
  glReadBuffer(GL_FRONT);&lt;br /&gt;
&lt;br /&gt;
  glReadPixels(0, 0, Width, Height, GL_RGB, GL_UNSIGNED_BYTE, buffer.begin());&lt;br /&gt;
&lt;br /&gt;
  GLubyte r,g,b;&lt;br /&gt;
  for(unsigned int col = 0; col &amp;lt; Width; col++)&lt;br /&gt;
  {&lt;br /&gt;
      for(unsigned int row = 0; row &amp;lt; Height; row++)&lt;br /&gt;
      {&lt;br /&gt;
          //works, but upside down&lt;br /&gt;
// 			r = buffer(row, col, 0);&lt;br /&gt;
// 			g = buffer(row, col, 1);&lt;br /&gt;
// 			b = buffer(row, col, 2);&lt;br /&gt;
          r = buffer(Height - row - 1, col, 0);&lt;br /&gt;
          g = buffer(Height - row - 1, col, 1);&lt;br /&gt;
          b = buffer(Height - row - 1, col, 2);&lt;br /&gt;
          RGBImage(col, row) = vil_rgb&amp;lt;vxl_byte&amp;gt;(r,g,b);&lt;br /&gt;
      }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  vil_save(RGBImage, filename.c_str());&lt;br /&gt;
&lt;br /&gt;
  cout &amp;lt;&amp;lt; &amp;quot;Done writing RGB image.&amp;quot; &amp;lt;&amp;lt; endl;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void ScreenshotFixed(const string &amp;amp;filename)&lt;br /&gt;
{&lt;br /&gt;
  unsigned int Width = 200;&lt;br /&gt;
  unsigned int Height = 100;&lt;br /&gt;
&lt;br /&gt;
  GLubyte buffer[100][200][3];&lt;br /&gt;
  glReadPixels(0, 0, Width, Height, GL_RGB, GL_UNSIGNED_BYTE, buffer);&lt;br /&gt;
&lt;br /&gt;
  vil_image_view&amp;lt;vil_rgb&amp;lt;vxl_byte&amp;gt; &amp;gt; RGBImage(Width, Height, 1, 1); //(cols, rows, 1, 1)&lt;br /&gt;
&lt;br /&gt;
  GLubyte r,g,b;&lt;br /&gt;
&lt;br /&gt;
  for(unsigned int i = 0; i &amp;lt; Width; ++i)&lt;br /&gt;
  {&lt;br /&gt;
      for(unsigned int j = 0; j &amp;lt; Height; ++j)&lt;br /&gt;
      {&lt;br /&gt;
          r = buffer[j][i][0];&lt;br /&gt;
          g = buffer[j][i][1];&lt;br /&gt;
          b = buffer[j][i][2];&lt;br /&gt;
          RGBImage(i, j) = vil_rgb&amp;lt;vxl_byte&amp;gt;(r,g,b);&lt;br /&gt;
      }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  vil_save(RGBImage, filename.c_str());&lt;br /&gt;
&lt;br /&gt;
  cout &amp;lt;&amp;lt; &amp;quot;Done writing RGB image.&amp;quot; &amp;lt;&amp;lt; endl;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Screenshot.h==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
#ifndef SCREENSHOT_H&lt;br /&gt;
#define SCREENSHOT_H&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;string&amp;gt;&lt;br /&gt;
&lt;br /&gt;
using namespace std;&lt;br /&gt;
&lt;br /&gt;
void Screenshot(const string &amp;amp;filename);&lt;br /&gt;
void ScreenshotFixed(const string &amp;amp;filename);&lt;br /&gt;
&lt;br /&gt;
#endif&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==CMakeLists.txt==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cmake&amp;quot;&amp;gt;&lt;br /&gt;
cmake_minimum_required(VERSION 2.6)&lt;br /&gt;
&lt;br /&gt;
PROJECT(Screenshot)&lt;br /&gt;
&lt;br /&gt;
FIND_PACKAGE(VXL REQUIRED)&lt;br /&gt;
INCLUDE(${VXL_CMAKE_DIR}/UseVXL.cmake)&lt;br /&gt;
&lt;br /&gt;
set(CMAKE_CXX_FLAGS &amp;quot;${CMAKE_CXX_FLAGS} -fopenmp&amp;quot;) #g++&lt;br /&gt;
&lt;br /&gt;
INCLUDE_DIRECTORIES(/usr/include/ /usr/local/include/)&lt;br /&gt;
&lt;br /&gt;
LINK_DIRECTORIES(/usr/lib /usr/local/lib)&lt;br /&gt;
&lt;br /&gt;
ADD_EXECUTABLE(Screenshot Test.cpp Screenshot.cpp)&lt;br /&gt;
&lt;br /&gt;
TARGET_LINK_LIBRARIES(Screenshot&lt;br /&gt;
glut GLU GL Xmu X11&lt;br /&gt;
vil vgl vnl vgl_algo vbl&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Daviddoria</name></author>	</entry>

	</feed>