C++Builder
  Начало   Форум   Помощь Войти Регистрация  
Страниц: [1]   Вниз
  Печать  
Автор Тема: Форма в качестве окна вывода  (Прочитано 2308 раз)
Sergey1985
Участник


Сказали спасибо: +8/-1
Offline

Сообщений: 310


Форма в качестве окна вывода
« : 15 Май 2015, 21:03:55 »

Доброго времени суток товарищи программеры. Стоит такая задача. Имеется обычная форма класса TForm. На нее выводится видео поток. Причем выводить можно только на  форму. Image или PaintBox не подходят.  (Почему? Ну это отдельная долгая песня). Так вот я хочу эту форму использовать просто как экранчик на основной форме. Для этого свойство BorderStyle установил в bsNone. Но теперь мне нужно ее как то "приклеить" к основной форме и так чтобы она была всегда на виду, а не скрывалась за главной. Можно ли это как то реализовать?   
Записан
POV
Участник


Сказали спасибо: +107/-7
Offline

Сообщений: 640


Re: Форма в качестве окна вывода
« Ответ #1 : 16 Май 2015, 23:02:08 »

Так ей Parent назначь программно нужный (главную форму) и всех делов.
Записан
S0mbre
Глобальный модератор


Сказали спасибо: +1113/-22
Offline

Сообщений: 2132

S0mbre


Re: Форма в качестве окна вывода
« Ответ #2 : 16 Май 2015, 23:29:07 »

Или MDI...
Записан
Sergey1985
Участник


Сказали спасибо: +8/-1
Offline

Сообщений: 310


Re: Форма в качестве окна вывода
« Ответ #3 : 18 Май 2015, 09:04:26 »

Так хорошо отличненько     А теперь самое интересное: как из набора отображаемых на это этой форме картинок получить видео файл с целью сохранить его на диске?
Записан
S0mbre
Глобальный модератор


Сказали спасибо: +1113/-22
Offline

Сообщений: 2132

S0mbre


Re: Форма в качестве окна вывода
« Ответ #4 : 19 Май 2015, 13:27:37 »

Цитата: Sergey1985 от 18 Май 2015, 09:04:26
Так хорошо отличненько     А теперь самое интересное: как из набора отображаемых на это этой форме картинок получить видео файл с целью сохранить его на диске?

Каких картинок? Какой видеофайл? 
Записан
Sergey1985
Участник


Сказали спасибо: +8/-1
Offline

Сообщений: 310


Re: Форма в качестве окна вывода
« Ответ #5 : 21 Май 2015, 13:14:09 »

Если поточнее то имеется поток фоток с фотокамеры идущих с определенной частотой я так понял в формате DIB. Затем вот с помощью этой функции
Код
void DrawMap(HDC hdc0, BYTE *D, int W, int H, int Z)
{
 if (hdc0) {
   HDC hdc1 = CreateCompatibleDC(hdc0);
   if (hdc1) {
     BITMAPINFO *bmpI = (BITMAPINFO*)malloc(sizeof(BITMAPINFOHEADER) + sizeof(RGBQUAD)*256);
     bmpI->bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
     bmpI->bmiHeader.biWidth = W;
     bmpI->bmiHeader.biHeight = H;
     bmpI->bmiHeader.biPlanes = 1;
     bmpI->bmiHeader.biBitCount = 8;
     bmpI->bmiHeader.biCompression = BI_RGB;
     bmpI->bmiHeader.biSizeImage = 0;
     bmpI->bmiHeader.biXPelsPerMeter =
     bmpI->bmiHeader.biYPelsPerMeter = 0;
     bmpI->bmiHeader.biClrUsed =
     bmpI->bmiHeader.biClrImportant = 256;
 
     RGBQUAD *pRGB = (RGBQUAD *)((BYTE*)bmpI + sizeof(BITMAPINFOHEADER));
     for (int i = 0; i 256; i++) {
       pRGB[i].rgbBlue = pRGB[i].rgbGreen = pRGB[i].rgbRed = i;
       pRGB[i].rgbReserved = 0;
     }
 
     HBITMAP hbmp = CreateDIBitmap(hdc0, (BITMAPINFOHEADER*)bmpI, CBM_INIT, D, bmpI, DIB_RGB_COLORS), hbmp0;
     if (hbmp) {
       hbmp0 = (HBITMAP)SelectObject(hdc1, hbmp);
       SetStretchBltMode(hdc0, HALFTONE);
       StretchBlt(hdc0, 0, 0, (W*Z)/100, (H*Z)/100, hdc1, 0, 0, W, H, SRCCOPY);
       SelectObject(hdc1, hbmp0);
       DeleteObject(hbmp);
     }
     free(bmpI);
     DeleteDC(hdc1);
   }
 }
}
эти данные преобразовываются в BMP формат и выводятся на форму.
Потом я вот таким образом
Код
TPicture *p=new TPicture;
HWND hwnd = CamForm->Handle;
HDC hdc = CamForm->Canvas->Handle;
TCanvas *C=new TCanvas;
C->Handle=hdc;
int w=CamForm->Width;;
int h=CamForm->Height;
p->Bitmap->Width=w;
p->Bitmap->Height=h;
p->Bitmap->Canvas->CopyMode=cmSrcCopy;
p->Bitmap->Canvas->CopyRect(TRect(0,0,w,h),C,TRect(0,0,w,h));
ReleaseDC(hwnd,hdc);
delete C;
получаю рисунки с формы который хранится в переменной p. И из этих рисунков хочу получить видео ну пусть даже в формате  AVI.

В общем вопрос такой  КАК ИЗ КАДРОВ - КАРТИНОК ПОЛУЧИТЬ ВИДЕО ФОРМАТА AVI?
  
« Последнее редактирование: 21 Май 2015, 22:12:57 от S0mbre » Записан
S0mbre
Глобальный модератор


Сказали спасибо: +1113/-22
Offline

Сообщений: 2132

S0mbre


« Ответ #6 : 21 Май 2015, 22:24:27 »

тынц
тынц

А вообще оптимизируй еще свой код - в нем много лишних "телодвижений". Зачем, например, выводить битмапы на форму, а уже затем их "грабить" при помощи CopyRect и опять сохранять в битмап? По хорошему, надо все в один присест делать )
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  




....

Powered by SMF 1.1.21 | SMF © 2025, Simple Machines
Страница сгенерирована за 0.133 секунд. Запросов: 19.