- type
- BitmapFileHeader=packed record
- bfType:word;
- bfSize:cardinal;
- bfReserved1:Word;
- bfReserved2:Word;
- bfOffBits:cardinal;
- end;
- BitmapInfoHeader=packed record
- biSize:cardinal;
- biWidth:Integer;
- biHeight:Integer;
- biPlanes:Word;
- biBitCount:Word;
- biCompression:cardinal;
- biSizeImage:cardinal;
- biXPelsPerMeter:Integer;
- biYPelsPerMeter:Integer;
- biClrUsed:cardinal;
- biClrImportant:cardinal;
- end;
- .....
- procedure Make_Screenshot(width,height:integer);
- var path,filename:string;
- infoheader:bitmapinfoheader;
- fileheader:bitmapfileheader;
- image:pointer;
- f:file;
- i:cardinal;
- begin
- with fileheader do
- begin
- bfType:=19778; //ergibt BM
- bfSize:=sizeof(fileheader)+sizeof(infoheader)+(Width*Height*3);
- bfOffBits:=sizeof(fileheader)+sizeof(infoheader);
- end;
- with infoheader do
- begin
- biSize:=sizeof(infoheader);
- biWidth:=width;
- biHeight:=height;
- biPlanes:=1;
- biBitCount:=24;
- biSizeImage:=Width*Height*3;
- end;
- getmem(image,width*height*3);
- glReadPixels( 0, 0, Width, Height, GL_BGR_EXT, GL_UNSIGNED_BYTE, image );
- getdir(0,path);
- i:=0;
- while i=i do
- begin
- filename:=path+'/scrshot'+inttostr(i)+'.bmp';
- if FileExists(filename)=false then
- break
- else
- inc(i);
- end;
- Assign(f, filename);
- Rewrite(F,1);
- BlockWrite(f,fileheader,sizeof(fileheader));
- BlockWrite(f,infoheader,sizeof(infoheader));
- BlockWrite(f,image^,height*width*3);
- Close(F);
- freemem(image);
- end;