[Lazarus] copy from Topenglcontext

Corpsman corpsman at web.de
Sun Jun 15 10:08:00 CEST 2014


My Version uses glReadPixels, result is TBitmap, this can easily be 
atteched to the cliboard.

Function OpenGLScreenshot: TBitmap;
Var
   dim: Array[0..3] Of Integer;
   c: Array Of Array[0..3] Of Byte;
   z, i, j: integer;
   TempIntfImg: TLazIntfImage;
   ImgHandle, ImgMaskHandle: HBitmap;
   CurColor: TFPColor;
Begin
   // Auslesen der Framebuffer Auflösung
   glGetIntegerv(GL_VIEWPORT, @dim[0]);
   // Erstellen des Bitmaps
   result := TBitmap.create;
   result.pixelformat := pf24bit;
   result.width := dim[2];
   result.height := dim[3];
   TempIntfImg := TLazIntfImage.Create(0, 0);
   TempIntfImg.LoadFromBitmap(result.Handle, result.MaskHandle);
   setlength(c, dim[2] * dim[3]);
   // Auslesen des Framebuffers in einen temporären Speicher
   glReadPixels(dim[0], dim[1], dim[2], dim[3], GL_RGBA, 
GL_UNSIGNED_BYTE, @c[0, 0]);
   // Umschreiben des Temporären Speichers in das TBitmap
   z := 0;
   For j := 0 To result.height - 1 Do
     For i := 0 To result.width - 1 Do Begin
       CurColor.red := c[z][0] * 256;
       CurColor.green := c[z][1] * 256;
       CurColor.blue := c[z][2] * 256;
       // c[z][3] wäre der Alphakanal, aber den Braucht man ja hier 
nicht ...
       TempIntfImg.Colors[i, j] := CurColor;
       inc(z);
     End;
   TempIntfImg.CreateBitmaps(ImgHandle, ImgMaskHandle, false);
   result.Handle := ImgHandle;
   result.MaskHandle := ImgMaskHandle;
   TempIntfImg.free;
End;


On 06/14/2014 12:13 PM, Michalis Kamburelis wrote:
> Andrea Mauri wrote:
>> Dear all,
>>
>> Is it possible to copy the content of OpenGLContext to the clipboard?
>> How can be done?
>>
> You could also copy the contents of OpenGL context (created by
> TOpenGLContext or any other similar control) using glReadPixels, and
> then convert the resulting bytes into a TBitmap instance. Then you can
> copy TBitmap contents to clipboard like Anton shows, using
> Clipboard.Assign (see
> http://wiki.lazarus.freepascal.org/Clipboard#Load_from_clipboard ).
>
> Using glReadPixels and then converting the result will be
> cross-platform, as opposed to Anton's solution using
> Windows.CreateCompatibleBitmap .
>
> Michalis
>
>
> --
> _______________________________________________
> Lazarus mailing list
> Lazarus at lists.lazarus.freepascal.org
> http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus
>


-- 

Auf meiner Homepage www.Corpsman.de ist immer was los, ständig wird sie aktualisiert und erweitert. Da ist für jeden was dabei.





More information about the Lazarus mailing list