Кстати, в вашей схеме у меня работает только ReadPixels, на скриншоте выходит только кнопка на сером фоне.. Но спасибо, хоть будет от чего отплясывать с бубнами..))
------------ Дoбавленo в 22.22:
Вот нашел решение где вроде не попиксельно:
http://stackoverflow.com/questions/6006984/save-opengl-scene-to-a-tbitmap-glreadpixels-returning-empty-data
Procedure GetOGL_BMP(var BMP: TBitmap);
var
Dimensions: array [0 .. 3] of Integer;
RGBBits: PRGBQuad;
Pixel: PRGBQuad;
Header: PBitmapInfo;
x, y: Integer;
Temp: Byte;
begin
glGetIntegerv(GL_VIEWPORT, @Dimensions);
GetMem(RGBBits, Dimensions[2] * Dimensions[3] * 4);
glFinish;
glPixelStorei(GL_PACK_ALIGNMENT, 4);
glPixelStorei(GL_PACK_ROW_LENGTH, 0);
glPixelStorei(GL_PACK_SKIP_ROWS, 0);
glPixelStorei(GL_PACK_SKIP_PIXELS, 0);
glReadPixels(0, 0, Dimensions[2], Dimensions[3], GL_RGBA, GL_UNSIGNED_BYTE,
RGBBits);
if not Assigned(BMP) then
BMP := TBitmap.Create;
BMP.PixelFormat := pf32Bit;
BMP.Width := Dimensions[2];
BMP.Height := Dimensions[3];
GetMem(Header, SizeOf(TBitmapInfoHeader));
with Header^.bmiHeader do
begin
biSize := SizeOf(TBitmapInfoHeader);
biWidth := Dimensions[2];
biHeight := Dimensions[3];
biPlanes := 1;
biBitCount := 32;
biCompression := BI_RGB;
biSizeImage := Dimensions[2] * Dimensions[3] * 4;
end;
// Rot und Blau vertauschen
Pixel := RGBBits;
for x := 0 to Dimensions[2] - 1 do
for y := 0 to Dimensions[3] - 1 do
begin
Temp := Pixel.rgbRed;
Pixel.rgbRed := Pixel.rgbBlue;
Pixel.rgbBlue := Temp;
inc(Pixel);
end;
SetDIBits(BMP.Canvas.Handle, BMP.Handle, 0, Dimensions[3], RGBBits,
TBitmapInfo(Header^), DIB_RGB_COLORS);
FreeMem(Header);
FreeMem(RGBBits);
end;
Только довести до компонента знаний не хватает.



Поиск
Друзья
Администрация