Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Мультимедия, OpenGL/DirectX > запись в поток directx ili directshow


Автор: rocko 13.8.2013, 10:35
Добрый день!
подскажите пожалуйста, как реализовать следующее:

я создаю битмап следующим образом:

Код

#include "stdafx.h"

#include <vfw.h>
#include <windows.h>
#include <tchar.h>


int _tmain(int argc, _TCHAR* argv[])
{
    printf("starting\n");
    
    HDC hdc = CreateCompatibleDC(NULL);

    BITMAPINFO bmi;
    BITMAPINFOHEADER bmheader;
    /*bmheader.biSize=14 + 40 + 324*256*4;
    bmheader.biWidth=324;
    bmheader.biHeight=256;
    bmheader.biPlanes=1;
    bmheader.biSizeImage=324*256;
    bmheader.biBitCount=32;
    bmheader.biCompression=0;
    bmheader.biXPelsPerMeter=0;
    bmheader.biYPelsPerMeter=0;*/
    //ZeroMemory(&bmi, sizeof(BITMAPINFO));
    bmi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
    
    bmi.bmiHeader.biBitCount = 32;
    bmi.bmiHeader.biHeight = 256;
    bmi.bmiHeader.biWidth = 324;
    bmi.bmiHeader.biPlanes =1;
    bmi.bmiHeader.biXPelsPerMeter=0;
    bmi.bmiHeader.biYPelsPerMeter=0;

HDC dc = CreateCompatibleDC(NULL);
 
char Frame[(324*256)*4];

for (int mass=0; mass<324*256; mass++ ){
Frame[mass]=160;
                                        }

for (int height=0; height < 256; height++){
for (int index=height*324; index < (height+1)*324; index++ ){
Frame[index]=(char)height;
}
}
    HBITMAP cross =(HBITMAP) CreateBitmap(324,256,1,32,Frame);
    
        
    printf("cross red\n");

    SelectObject(hdc, cross);
        
    int i_count=0;
    
    printf("starting loop\n");

    while (1)
    {

        HDC hdc_x = GetDC(HWND_DESKTOP);
        SetStretchBltMode(hdc, HALFTONE);
        int ret=BitBlt(hdc_x,300,300,64,64,hdc,0,0,SRCCOPY);     
        
        
        printf(" %d\n", ret);
        
        ReleaseDC(HWND_DESKTOP,hdc_x); 
        
        printf(" looping : %d %d \n", i_count, ret);
        Sleep(500);
        i_count++;
    }

    return 0;
}

как этот полученный битмап, 
Код

HBITMAP cross =(HBITMAP) CreateBitmap(324,256,1,32,Frame);

записать в поток директ шоу, а потом отобразить на экране?

Этот массив байт будет обновляться по таймеру, и получится что то вроде видео. 
Как это организовать? может кто то делал что то подобное?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)