Visual Basic - мастерская разработчика
Библиотеки

DirectX

Обзоры
DirectDraw
Direct3D
DirectX Audio
DirectPlay
DirectInput
Fido Topics
SourceCode
Tools&Libs

OpenGL

Статьи и учебники
Fido Topics
SourceCode
Tools&Libs

Архив по Glide

Движки

Обзоры
Учебники
SourceCode
Downloads

Создание игр

Ваши игры

Обзорные статьи
Учебники
Fido Topics
SourceCode
Download

Stuff

Программер-Чат

Псевдо-FTP
Disclaimer
Оффтопик

 

OpenGL->bmp

Fido Themes (ru.opengl)

От: Andrey Golovko <Andrey.Golovko@p23.f2.n6009.z2.fidonet.org>
Тема: OpenGL->*.bmp
Дата: 2 апреля 2001 г. 20:39

Как поживаете, All ?


Hужно сохранить картинку из окна OpenGL в BMP-файл. Пожалуста с примером, если можно.
Спасибо

C уважением, Andrey Golovko.



От: Vyacheslav Burdjanadze <Vyacheslav.Burdjanadze@trustworks.com>
Тема: Re: OpenGL->*.bmp
Дата: 3 апреля 2001 г. 14:08

> Hужно сохранить картинку из окна OpenGL в BMP-файл. Пожалуста
> с примером, если можно.

Нажми ПринтСкрин :)

От: Sergey Stoma <sstoma@iba.com.by>
Тема: Re: OpenGL->*.bmp
Дата: 3 апреля 2001 г. 14:43

Andrey Golovko пишет:
AG> Hужно сохранить картинку из окна OpenGL в BMP-файл. Пожалуста
AG> с примером, если можно.

Если не самому делать, то OpenIL рулит.

От: Alexander Mihailenko <almih@advent.avtlg.ru>
Тема: Re: OpenGL->*.bmp
Дата: 3 апреля 2001 г. 15:30

Hi!

"Andrey Golovko" <Andrey.Golovko@p23.f2.n6009.z2.fidonet.org> wrote in message news:986251285@p23.f2.n6009.z2.FIDOnet.ftn...
> Hужно сохранить картинку из окна OpenGL в BMP-файл. Пожалуста
> с примером, если можно.

Лениво ;) Да че там думать -

unsigned char *pixels = new [...]

glReadBuffer(GL_FRONT);
glPixelStorei(GL_UNPACK_ALIGNMENT,1);
glReadPixels(0,0,width,height,GL_RGB,GL_UNSIGNED_BYTE,pixels);

А пиксели в BMP - это-уж ты сам как-нибудь ;))

Regards, Alex.

От: Sergey Skornyakov <s.skorniakov@megaputer.ru>
Тема: Re: OpenGL->*.bmp
Дата: 3 апреля 2001 г. 15:38

> Hужно сохранить картинку из окна OpenGL в BMP-файл. Пожалуста
> с примером, если можно.

Типа вот так:

STDMETHODIMP CXCtl::Print(HDC hDC)
{
HBITMAP hbm = (HBITMAP) GetCurrentObject(hDC, OBJ_BITMAP);
if (hbm == NULL)
return E_FAIL;
BITMAP bmp;
memset(&bmp, 0, sizeof(bmp));
if (!GetObject(hbm, sizeof(bmp), &bmp))
return E_FAIL;
const int BITMAPINFOHEADER_SIZE = sizeof(BITMAPINFOHEADER);
BYTE* abBitmapInfo[BITMAPINFOHEADER_SIZE];
BITMAPINFOHEADER* pBMIH = (BITMAPINFOHEADER*)abBitmapInfo;
memset(pBMIH, 0, BITMAPINFOHEADER_SIZE);
// Fill in the header info.
pBMIH->biSize = sizeof(BITMAPINFOHEADER);
pBMIH->biWidth = bmp.bmWidth + 1;
pBMIH->biHeight = bmp.bmHeight;
pBMIH->biPlanes = 1;
pBMIH->biBitCount = 32;
pBMIH->biCompression = BI_RGB;
BYTE* pBits;
HBITMAP hbmBuffer = CreateDIBSection(hDC, (BITMAPINFO*) pBMIH,
DIB_RGB_COLORS,
(VOID **) &pBits, NULL, 0);
if (hbmBuffer == NULL || pBits == NULL)
return E_FAIL;
if (!m_hglrc)
return E_UNEXPECTED;
if (m_hglrc != wglGetCurrentContext())
{
ATLASSERT(0);
wglMakeCurrent(m_hdc, m_hglrc);
}
glFlush();
GLASSERT();
RedrawScene();
GLint iAlign = 1;
glGetIntegerv(GL_PACK_ALIGNMENT, &iAlign);
glPixelStorei(GL_PACK_ALIGNMENT, 1);
GLASSERT();
glReadBuffer(GL_BACK_LEFT);
GLASSERT();
// Copy the bits in to the DIB section.
glReadPixels(0, 0, pBMIH->biWidth, pBMIH->biHeight, GL_RGB,
GL_UNSIGNED_BYTE, pBits);
GLASSERT();
glPixelStorei(GL_PACK_ALIGNMENT, iAlign);
GLASSERT();
HDC hdc = wglGetCurrentDC();
ATLASSERT(hdc);
if (hdc)
SwapBuffers(hdc);
// Change from RGB to BGR.
RGBQUAD* pDest = &(((RGBQUAD*) pBits)[pBMIH->biWidth * pBMIH->biHeight]);
BYTE *pSrc = &(((BYTE*) pBits)[pBMIH->biWidth * pBMIH->biHeight * 3]);
// From end to begin - aviod overwriting
for (int i = 0 ; i < pBMIH->biWidth * pBMIH->biHeight; i++)
{
pDest--;
pSrc -= 3;
pDest->rgbRed = pSrc[0];
pDest->rgbGreen = pSrc[1];
pDest->rgbBlue = pSrc[2];
}
SetDIBits(hDC, hbm, 0, pBMIH->biHeight, pBits, (BITMAPINFO*) pBMIH,
DIB_RGB_COLORS);
DeleteObject(hbmBuffer);
return S_OK;
}

Перед вызовом этого метода контрола были созданы memory DC (CreateCompatibleDC) и bitmap (CreateCompatibleBitmap). Битмап выбран в DC. RedrawScene() рисует в бэк-буфер.

Best regards,
Sergey.

От: Andrey Golovko <Andrey.Golovko@p23.f2.n6009.z2.fidonet.org>
Тема: OpenGL->*.bmp
Дата: 3 апреля 2001 г. 20:59

Как поживаете, Vyacheslav ?

Мои бортовые системы запеленговали, что в Вторник Апрель 03 2001 13:08,
Vyacheslav Burdjanadze писал All:

>> Hужно сохранить картинку из окна OpenGL в BMP-файл. Пожалуста
>> с примером, если можно.

VB> Hажми ПринтСкрин :)

:) Hадоело нажимать. Hужно программно.

C уважением, Andrey Golovko.


 

 


Проект
Создание Народного Учебника по OpenGL

Участвовать!
Поиск
Найдите статью или файл:


Рассылка
Новости сайта
La Vision в вашем почтовом ящике








Программирование на С++ Delphi и Паскаль
Центр демо-искусства в России