Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

печать из openGL

289
11 марта 2011 года
Jeyson
207 / / 20.04.2000
Здравствуйте.
Возникла необходимость распечатки изображений из openGL.
Пишу в C++Builder 6.0. ОС Windows 7 / XP
Раньше пытался печатать, но возникли проблемы: текст на бумагу не выходит. Решил пойти другим путем - экспорт в метафайл - не знаю как подступиться - инфу найти не могу. Далее совсем примитивно - просто скопировать в буфер. Исходник нарыл где-то в сети (он ниже) - результат черная картинка.

Помогите пожалуйста. Может быть наилучшее решение для меня - это экспорт в метафайл
Код:
TRect rect;
   int cx, cy;
   HBITMAP bitmap;
   HDC pDC, MemDC;
   int NbBytes;
   BITMAPINFOHEADER header;

   rect =  Form1->GetClientRect();
   cx = rect.right;
   cy = rect.bottom;

   cx = cx - cx % 4;
   pDC = GetDC(Form1->Handle);
   MemDC = CreateCompatibleDC(pDC );
   bitmap = CreateCompatibleBitmap(pDC ,cx,cy);
   SelectObject(MemDC, bitmap);
   NbBytes = 3 * cx * cy;
   //GetMem(pPixelData, NbBytes);
   unsigned char * pPixelData=new unsigned char [NbBytes];
   ::glReadPixels(0,0,cx,cy,GL_RGB,GL_UNSIGNED_BYTE,pPixelData);

   header.biWidth = cx;
   header.biHeight = cy;
   header.biSizeImage = NbBytes;
   header.biSize = 40;
   header.biPlanes = 1;
   header.biBitCount =  3 * 8; // RGB
   header.biCompression = 0;
   header.biXPelsPerMeter = 0;
   header.biYPelsPerMeter = 0;
   header.biClrUsed = 0;
   header.biClrImportant = 0;

   HANDLE handle = (HANDLE)::GlobalAlloc (GHND,sizeof(BITMAPINFOHEADER) + NbBytes);
    if(handle != NULL)
 {

   char *pData = (char *) ::GlobalLock((HGLOBAL)handle);

  memcpy(pData,&header,sizeof(BITMAPINFOHEADER));
  memcpy(pData+sizeof(BITMAPINFOHEADER),pPixelData,NbBytes);
  ::GlobalUnlock((HGLOBAL)handle);

  EmptyClipboard();
  SetClipboardData(CF_DIB,handle);
  CloseClipboard();
 }
 DeleteDC(MemDC);
 DeleteObject(bitmap);
 delete [] pPixelData;



[COLOR="red"]
__________________
Неужели за столько времени, не научились пользоваться тегами [сode][/сode]?
В следующий раз - нарушение гарантировано.

Сволочной модератор.
__________________[/COLOR]
8.2K
21 марта 2011 года
user1
71 / / 16.03.2007
pomnu kogda-to i sam smotrel podobnoe.

http://netcode.ru/cpp/?lang=&katID=4&skatID=35&artID=381

mozhet pomozht chem statiya
289
22 марта 2011 года
Jeyson
207 / / 20.04.2000
Спасибо, но в этом примере к сожалению шрифты на печать не выводятся.
Модератор - сорри .... учту :(
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог