Guten Tag,
ich möchte unter Delphi/
openGL den Framebuffer (Grafik auf dem Screen) direkt in eine BitMap schaufeln - nicht über den Umweg zur Festplatte.
Den nachfolgenden -modifizierten- Code habe ich aus dem Internet - Dank an den Verfasser.
Leider zeigt die Routine glReadPixel beim Programmlauf eine "Zugriffsverletzung" an.
Frage an die Community:
Wie muss der nachfolgende Code korrigiert werden ?
Vielen Dank
KlausJakob
////////////////////////////////////////////////////
procedure screentobitmap(var name:TBitMap);
var
pixels:Array of Byte;
viewport:Array [0 .. 3] of Integer;
mstream:TMemoryStream;
begin
mstream:=TMemoryStream.Create;
name.PixelFormat:=pf32bit;
glGetIntegerv(GL_VIEWPORT,@viewport);
name.Width:=viewport[2];
name.Height:=viewport[3];
try
SetLength(pixels,viewport[2]*viewport[3]*4);
glReadPixels(0,0,viewport[2],viewport[3],GL_BGRA,GL_UNSIGNED_BYTE,@pixels);
// glReadPixels erzeugt "Zugriffsverletzung" ???????????
mstream.Read(pixels,viewport[2]*viewport[3]*4);
name.LoadFromStream(mstream);
finally
mstream.Free;
end;
end;
//////////////////////////////////////////////////////////////////////////