![]() |
Framebuffer in eine BitMap unter openGL
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; ////////////////////////////////////////////////////////////////////////// |
AW: Framebuffer in eine BitMap unter openGL
Meinst du
![]() |
AW: Framebuffer in eine BitMap unter openGL
Das sollte gehen:
Delphi-Quellcode:
glReadPixels(0,0,viewport[2],viewport[3],GL_BGRA,GL_UNSIGNED_BYTE,@pixels[0]);
Versuche mal folgendes:
Delphi-Quellcode:
Die Adresse von Pixels ist nicht dieselbe wie von Pixels[0]! Kann ja nicht sein da auch eine dynamisches Array der Länge 0 existieren kann,
procedure TForm31.Button1Click(Sender: TObject);
var pixels : array of byte; begin SetLength(pixels, 100); showmessage(format('Adress of a pixels %p Adress of pixels[0] : %p', [@pixels, @pixels[0]])); end; |
AW: Framebuffer in eine BitMap unter openGL
Hallo Rollo62,
vielen Dank. Dein Vorschlag beinhaltet alles was mir fehlte. Nach tagelangen Versuchen und Suchen einfach Rollo62 fragen!!!! :lol: Vielen Dank und Grüße aus Speyer KlausJakob |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:39 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz