Only German, but with samples for saving screenshots to bmp or tga file format.
http://wiki.delphigl.com/index.php/Screenshot
I try to translate the comments for bimtap version
Code:
procedure ScreenShot(const Name : string);
var
F : file;
FileInfo: BITMAPINFOHEADER;
FileHeader : BITMAPFILEHEADER;
pPicData:Pointer;
Viewport : array[0..3] of integer;
begin
// clear header
ZeroMemory(@FileHeader, SizeOf(BITMAPFILEHEADER));
ZeroMemory(@FileInfo, SizeOf(BITMAPINFOHEADER));
// query screen size of viewpoint
glGetIntegerv(GL_VIEWPORT, @Viewport);
// Init header
FileHeader.bfType := 19778; //$4D42 = 'BM'
FileHeader.bfOffBits := SizeOf(BITMAPINFOHEADER)+SizeOf(BITMAPFILEHEADER);
// setup bitmap header
FileInfo.biSize := SizeOf(BITMAPINFOHEADER);
FileInfo.biWidth := Viewport[2];
FileInfo.biHeight := Viewport[3];
FileInfo.biPlanes := 1;
FileInfo.biBitCount := 32;
FileInfo.biSizeImage := FileInfo.biWidth*FileInfo.biHeight*(FileInfo.biBitCount div 8);
// setup file size
FileHeader.bfSize := FileHeader.bfOffBits + FileInfo.biSizeImage;
// get memory for image
GetMem(pPicData, FileInfo.biSizeImage);
try
// read pixels from opengl frame buffer
glReadPixels(0, 0, Viewport[2], Viewport[3], GL_BGRA, GL_UNSIGNED_BYTE, pPicData);
// write image to disk, modern version are using streams
AssignFile(f, name);
Rewrite( f,1 );
try
BlockWrite(F, FileHeader, SizeOf(BITMAPFILEHEADER));
BlockWrite(F, FileInfo, SizeOf(BITMAPINFOHEADER));
BlockWrite(F, pPicData^, FileInfo.biSizeImage );
finally
CloseFile(f);
end;
finally
// free reserved pixel data
FreeMem(pPicData, FileInfo.biSizeImage);
end;
end;
Bookmarks