如何在全屏opengl游戏Delphi中拍摄截图?

时间:2012-03-19 09:50:13

标签: delphi opengl screenshot

  

可能重复:
  How Take screenshot opengl game ? for Delphi

我需要帮助。我需要截屏全屏opengl游戏delphi来源。

1 个答案:

答案 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;