Сидят два программера в офисе. Бац - звонок телефонный, на проводе шеф:
- Hу, ребята, чем занимаетесь?
- Козла забиваем!
- В домино играете ?!
- Да неееее - в DOOM!
gr - объект, в канве которого я рисую с помощью OpenGL
Классический код Delphi!
Задача - сохранить содержимое окна OpenGL (представленное как gr) в виде файла BMP.
Расшифровка кода:
1. bt := TBitmap.Create;: Создается новый экземпляр объекта TBitmap, представляющего собой изображение bitmap.
2. with bt do ... end;: Входит в блок области видимости, где все заявления выполняются с объектом bt как явным владельцем.
3. Width := gr.Width; и Height := gr.Height;: Устанавливается ширина и высота объекта TBitmap в соответствие с шириной и высотой окна OpenGL (gr).
4. Canvas.CopyRect(ClientRect, gr.Canvas, gr.ClientRect);: Копируется прямоугольник из канваса OpenGL (представленного как gr.Canvas) в клиентскую область канваса объекта TBitmap.
5. SaveToFile('e:\bt.bmp');: Сохраняется модифицированный объект TBitmap в виде файла BMP с именем "bt.bmp" в указанной папке ('e:\").
6. Free;: Освобождается память, выделенная для объекта TBitmap.
В целом, этот код успешно захватывает содержимое окна OpenGL и сохраняет его в виде файла BMP.
Альтернативное решение:
Если вы хотите улучшить производительность или упростить процесс, рассмотрите использование класса TGLBitmap, предоставляемого библиотекой OpenGL. Этот класс может напрямую отображать содержимое OpenGL в изображение bitmap без необходимости ручного копирования пикселей. Вам нужно создать экземпляр класса TGLBitmap, установить его размер и разрешение, соответствующие размеру и разрешению вашего окна OpenGL, а затем вызвать метод Render для захвата содержимого OpenGL. Затем вы можете сохранить полученное изображение с помощью метода SaveToFile. Вот пример модификации кода для использования класса TGLBitmap:
Обратите внимание, что класс TGLBitmap доступен только в том случае, если вы установили и правильно связали библиотеку OpenGL в ваш проект.
В статье описывается способ записи содержимое окна OpenGL в файл BMP с помощью языка программирования Pascal и библиотеки TBitmap.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.