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);
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();
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);
RGBQUAD* pDest = &(((RGBQUAD*) pBits)[pBMIH->biWidth * pBMIH->biHeight]);
BYTE *pSrc = &(((BYTE*) pBits)[pBMIH->biWidth * pBMIH->biHeight
* 3]);
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.
|
 |
 |
|