www.xbdev.net
xbdev - software development
Wednesday April 15, 2026
Home | Contact | Support | OpenXDK The Free, Legal, Open Source XBox Development Kit...
     
 

OpenXDK

The Free, Legal, Open Source XBox Development Kit...

 

ScreenCapture - Save the screen to a tga file



Sometimes it's useful to grab the screen and save it to file. For a number of reasons, it allows you to really sit down and look at the image (debugging), it also allow us to create screenshots so you can show off your demo's...hehehe.

The default location of the save is to the
D
drive on the local xbox harddrive. Once the file has been saved - you can ftp or and copy the file to your computer (or use one of the xbox file access tools).


/*********************************************************************************/
/*                                                                               */
/*  XBOX OpenXDK ScreenCatpure                                                   */
/*                                                                               */
/*  File:   screencapture.c                                                      */
/*  Date:   23-02-04                                                             */
/*  About:  Uncomplicated screen capture function (graps raw pixels) saves to    */
/*          tga file.                                                            */
/*                                                                               */
/*********************************************************************************/
/*                                                                               */
/*  Platform: XBOX - OpenXDK                                                     */
/*                                                                               */
/*********************************************************************************/
 
// tga header structure.
#pragma pack(1)
typedef struct _tgaheader
{
      uint08 idlength;              // Misc header
      uint08 colourmap;
      uint08 imagetype;
      uint16 colourmap_origin;      // Colour map spec
      uint16 colourmap_length;
      uint08 colourmap_type;
      uint16 xorigin;                     // Image spec
      uint16 yorigin;
      uint16 width;
      uint16 height;
      uint08 pixelsize;
      uint08 descriptor;
} TGAHeader, *PTGAHeader;
#pragma pack()
 

void ScreenCapture(char *path)
{
      TGAHeader Header = {0,0,2, 0,0,32, 0,480,640,480,32,0x00000008};
 
      HANDLE TGAoutput = CreateFile(path, GENERIC_WRITE, 0, 0, CREATE_ALWAYS, 0, 0);
      WriteFile(TGAoutput, &Header, sizeof(Header), 0, 0);
 
      ScreenInfo ScrStruct = vga_get_screen_info();
      uint32* pScr = (uint32*)ScrStruct.ScreenAddress;
      uint32 *FileBuffer = (uint32*)malloc(640*480*4);
 
      uint32 i, j;
      for (i=0; i<480; i++)
      {
            for (j=0; j<640; j++)
            {
                  FileBuffer[j+((479-i)*640)] = *pScr;
                  pScr++;
            }// End inner loop
      }// End outer loop
 
      WriteFile(TGAoutput, FileBuffer, 640*480*4, 0, 0);
      CloseHandle(TGAoutput);
 
      free(FileBuffer);
}// End ScreenCapture(..)
 
 
/*********************************************************************************/
/*                                                                               */
/*                          Program Entry Point                                  */
/*                                                                               */
/*********************************************************************************/
/*                                                                               */
/*  Few lines of code to test our code, launch different apps etc.               */
/*                                                                               */
/*********************************************************************************/
 
void main()
{
      Bitmap         *screen;
      unsigned int   *p;
      int                x, y, xx=0;
 
      //let's init the screen
      vga_init_mode(MODE_320x240x32);
 
      vga_vsync();                              // Wait for Vertical Blank
    vga_flip();                                 // Flip
      vga_clear();                    // Clear Screen
 
      // So where's the screen? who knows if we're page flipping?
      screen = get_screen_bitmap();
 
      // Nice pattern on the screen
      p = screen->data;
      for (y=0; y<screen->h; y++)
      {
            for (x=0; x<screen->w; x++)
            {
                        *p++ = ((x+xx)^y)&0xFF; //yay a XOR pattern!!! :D
            }
      }
      xx++;
 
      // Save our data that we've rendered to the screen, before
      // we try and save it to file
      vga_vsync();                              // Wait for Vertical Blank
    vga_flip();                                 // Flip
 
 
      ScreenCapture("D:\\screengrab.tga");
 
}// End main



 
Advert (Support Website)

 
 Visitor:
Copyright (c) 2002-2026 xbdev.net - All rights reserved.
Designated articles, tutorials and software are the property of their respective owners.