|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Снятие скриншота с OpenGL приложения.
Подскажите пожалуйста, как можно снять скриншот с такого рода приложений? Используй станартные процедуры получаю "квадрат малевича"... Скриншоты нужно снимать с hl.exe
|
#2
|
|||
|
|||
Up.
Ну хоть кто-нибудь подскажите!!! |
#3
|
|||
|
|||
gr - объект, в канве которого я рисую с помощью OpenGL
bt := TBitmap.Create; with bt do begin Width := gr.Width; Height := gr.Height; Canvas.CopyRect(ClientRect, gr.Canvas, gr.ClientRect); SaveToFile('e:\bt.bmp'); Free; end; Можно ли еним снять картинки из игр? Если да, то что сдесь неверно? |
#4
|
|||
|
|||
deathor, а у меня этот ваш вариант работает без проблем. Только если я сохраняю картинку с помощью диалога, то на картинке оказываются отсеченными те части, которые заслонялись диалоговым окном. Если дело в этом, то попробуйте перед вызовом метода CopyRect насильно еще раз отрисовать всю сцену (и, возможно, придется вызвать после отрисовки Application.ProcessMessages). Тогда исчезают отсеченные куски картинки)).
Последний раз редактировалось Nyctos Kasignete, 30.03.2009 в 00:34. |
#5
|
|||
|
|||
В таком случае дай кусок программы, где ты его использовал... может что-нить не то творю..
|
#6
|
|||
|
|||
А что я могу вам дать? Процедура сохранения та же, что и у вас.
Код:
procedure TForm1.ImageSaver(const ImageFileName: TFileName); var FormBitmap: TBitmap; begin FormBitmap := TBitmap.Create; FormBitmap.Width := ClientWidth; FormBitmap.Height := ClientHeight; RenderScene(); // вот здесь я перерисоваваю сцену. Application.ProcessMessages; FormBitmap.Canvas.CopyRect(Rect(0, 0, ClientWidth, ClientHeight), Form1.Canvas, Rect(0, 0, ClientWidth, ClientHeight)); FormBitmap.SaveToFile(ImageFileName); FormBitmap.Free; end; Код:
procedure RenderScene; begin glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT); glPushMatrix(); {тут чисто мои заморочки} glTranslatef(Form1.xTr, Form1.yTr, Form1.zTr); glRotatef(Form1.xRot, 1.0, 0.0, 0.0); glRotatef(Form1.yRot, 0.0, 1.0, 0.0); glRotatef(Form1.zRot, 0.0, 0.0, 1.0); {тут мои заморочки заканчиваются} glCallList(List1); // это вызывается заранее откомпилированный лист glPopMatrix(); SwapBuffers(Form1.DC); end; |