Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 6 581

/ вопрос решён /

Здравствуйте, эксперты!
Почему OpenGL не делает скрин-шот в файл? Хочется получить зеленый фон, а получается белый.

Приложение:
  1. {{code}}
  2. unit Unit4lif;
  3. {
  4.  
  5.  
  6.  
  7.  
  8. }
  9. interface
  10.  
  11. uses opengl,
  12. Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  13. StdCtrls, ExtCtrls;
  14.  
  15. type
  16. TForm1 = class(TForm)
  17. procedure FormCreate(Sender: TObject);
  18. procedure FormResize(Sender: TObject);
  19. procedure FormDestroy(Sender: TObject);
  20. procedure FormPaint(Sender: TObject);
  21. private
  22. { Private declarations }
  23. public
  24. { Public declarations }
  25. end;
  26.  
  27. var
  28. Form1: TForm1;
  29. DC: hdc;
  30. GC: HGLRC;
  31.  
  32.  
  33. implementation
  34.  
  35. {$R *.DFM}
  36.  
  37.  
  38. {=======================================================================
  39.  
  40. procedure SetDCPixelFormat;
  41. var
  42. nPixelFormat: Integer;
  43. pfd: TPixelFormatDescriptor;
  44. begin
  45. FillChar(pfd, SizeOf(pfd), 0);
  46. With pfd do begin
  47. dwFlags := PFD_DRAW_TO_WINDOW or
  48. PFD_SUPPORT_OPENGL or
  49. PFD_DOUBLEBUFFER;
  50. cDepthBits:= 32;
  51. end;
  52. nPixelFormat := ChoosePixelFormat(DC, @pfd);
  53. SetPixelFormat(DC, nPixelFormat, @pfd);
  54. end;
  55.  
  56.  
  57.  
  58. procedure TForm1.FormCreate(Sender: TObject);
  59. begin
  60. DC := GetDC(Handle);
  61. SetDCPixelFormat;
  62. GC := wglCreateContext(DC);
  63. wglMakeCurrent(DC, GC);
  64. glClearColor (0.0, 0.5, 0.0, 1.0);
  65. end;
  66.  
  67.  
  68.  
  69. procedure TForm1.FormResize(Sender: TObject);
  70. begin
  71. glMatrixMode(GL_PROJECTION);
  72. glLoadIdentity;
  73. gluPerspective(41, ClientWidth / ClientHeight, 1.0, 20.0);
  74. glViewport(0, 0, ClientWidth, ClientHeight);
  75. glMatrixMode(GL_MODELVIEW);
  76. glLoadIdentity;
  77. end;
  78.  
  79.  
  80.  
  81. procedure TForm1.FormDestroy(Sender: TObject);
  82. begin
  83. wglMakeCurrent(0, 0);
  84. wglDeleteContext(GC);
  85. ReleaseDC(Handle, DC);
  86. DeleteDC(DC);
  87. end;
  88.  
  89.  
  90.  
  91. procedure TForm1.FormPaint(Sender: TObject);
  92. var bu: tbitmap;
  93. begin
  94. glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
  95. glFinish;
  96. SwapBuffers(DC);
  97. bu:=tbitmap.create;
  98. bu.Width:=form1.clientwidth;
  99. bu.height:=form1.clientheight;
  100. bitblt(bu.handle,0,0,bu.width,bu.height,dc,0,0,srccopy);
  101. with bu.canvas do
  102. begin
  103. brush.color:=clyellow;
  104. pen.color:=clyellow;
  105. ellipse(30,30,100,100);
  106. end;
  107.  
  108. bu.SaveToFile('!!!4.bmp');
  109. bu.free;
  110. end;
  111. end.
  112.  
  113. {{/code}}


Drinkenz Вопрос решён, но можно продолжить его обсуждение в мини-форуме

Вопрос задал: Drinkenz (статус: 1-ый класс)
Вопрос отправлен: 28 апреля 2015, 23:20
Состояние вопроса: решён, ответов: 0.


Мини-форум вопроса

Всего сообщений: 3; последнее сообщение — 9 мая 2015, 21:17; участников в обсуждении: 2.
DNK

DNK (статус: Студент), 4 мая 2015, 07:59 [#1]:

Может попробовать скринить не из события отрисовки, а по таймеру например. И помню у меня тоже были проблемы получить скрин с помощью bitblt даже для обычной формы со стандартными компонентами.
"Digital Networked Knight"
Drinkenz

Drinkenz (статус: 1-ый класс), 8 мая 2015, 09:15 [#2]:

Решение найдено. Делаю BitBlt всего рабочего стола, а потом вырезаю нужный прямоугольник.

8 мая 2015, 09:17: Статус вопроса изменён на решённый (изменил автор вопроса — Drinkenz)

DNK

DNK (статус: Студент), 9 мая 2015, 21:17 [#3]:

Похвально!
"Digital Networked Knight"

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:58
Выполнено за 0.02 сек.