我需要帮助。我需要截屏全屏opengl游戏delphi来源。
答案 0 :(得分:2)
这里有我已经熟的东西,你没有指定Delphi版本,所以这是在D2010写的,不幸的是我唯一的游戏是反击1.6,结果是黑色 image,但我很确定你可以从这里开始工作(这是一项繁忙的工作,但我没有太多时间),所以这里是代码:
function TakeGameShot(const AFileName: string; const AWidth, AHeight: Integer): Boolean;
var
LPixels: array of Byte;
LLine: PByteArray;
LBitmap: TBitmap;
Index: Integer;
begin
Result := False;
LBitmap := TBitmap.Create;
try
LBitmap.PixelFormat := pf24bit;
LBitmap.Height := AHeight;
LBitmap.Width := AWidth;
// width * height * 3 bytes/pixel
SetLength(LPixels, AWidth * AHeight * 3);
// tell open gl which buffer we're interested in
glReadBuffer(GL_BACK);
// read pixels
glReadPixels(0, 0, AWidth, AHeight, GL_RGB, GL_UNSIGNED_BYTE, @LPixels);
// scan each line from bitmap
for Index := 0 to AHeight -1 do begin
LLine := LBitmap.ScanLine[ Index ];
// move data from LPixels to LLine, data size = Width * 3(bytes/pixel)
Move(LPixels[ Index * AWidth ], LLine^[0], AWidth * 3);
end; // for Index := 0 to AHeight -1 do begin
// save the bitmap
LBitmap.SaveToFile(AFileName);
// if we reached this line, we're pretty much OK
Result := True;
finally
LBitmap.Free;
end;
end;