2012-03-19 85 views

回答

2

這裏的東西我已經熟了,你有沒有指定的德爾福版本,所以這是在D2010寫的,不幸的是唯一的遊戲我是反恐精英1.6,結果是黑色圖像,但我敢肯定,你可以從這裏工作的方式(這是一個繁忙的工作,但我沒有太多的時間),所以這裏的代碼:

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;