hilpers


  hilpers > microsoft.* > microsoft.vc > 03/2007

 #1  
12.03.2007, 15:30
Alex_B
Hallo,

In Managed DirectX kann ich eine gerenderte Szene als Bitmap-Datei
speichern. Das funtkioniert.
Wie kann ich aber eine Bildfolge als Film speichern. Ich habe in
codeproject.com ein Beispiel in C++ gefunden, nicht aber für C#. Ich weiß
auch nicht wie ich das Programm in codeproject.com von C++ nach C#
umschreiben kann.

Vielen Dank für Eure Tipps,
viele Grüße
Alexander Braeumer
 #2  
12.03.2007, 16:44
Karsten Schulz
Hi Alex,

> Wie kann ich aber eine Bildfolge als Film speichern.


Willst du es als Konfirmen Videostream speichern,
kannst du einerseits VFW verwenden, oder du mußt
ein DirectShow Stream anlegen.

Willst du Linearen Specher endlos als Film -streamen
mach ich das so:

Hier mit DatenPack , optional via Zip oder als Streifenpacker.


#pragma once

#include "zlib.h"
#pragma comment(lib, "zdll.lib")
#define ENCPUT(count,last){if(!(count == 1 && 0xc0 != (0xc0&last)))*pDest++
= 0xc0|count;*pDest++ = last;}

class CPressure
{
public:
CPressure(void);
~CPressure(void);

DWORD Pressure(BYTE *pDest,BYTE *pScr,DWORD Size);
DWORD UnPressure(BYTE *pDest,BYTE *pScr,DWORD Size);

DWORD ZipPressure(BYTE *pDest,BYTE *pScr,DWORD Size);
DWORD ZipUnPressure(BYTE *pDest,BYTE *pScr,DWORD Size);

void Close(void);
bool Open(TCHAR *pFname,TCHAR *pMd, DWORD MaxSz);
bool Load(BYTE *pMem,DWORD Size);
bool Save(BYTE *pMem,DWORD Size);
private:
BYTE *m_pPackMem;
FILE *m_fp;
};

#include "StdAfx.h"
#include "Pressure.h"

CPressure::CPressure(void)
{
m_pPackMem = 0;
m_fp = 0;
}

CPressure::~CPressure(void)
{
Close();
}


DWORD CPressure::UnPressure(BYTE *pDest,BYTE *pScr,DWORD Size)
{
register BYTE c,press;

while(Size > 0)
{
c = *pScr++;

if( (c&0xc0) > 0x80)
{
press = (c & 0x3f);
c = *pScr++;
}else press = 1;

while(press--)
{
Size--;
*pDest++ = c;
}
}

return (DWORD)pScr;
}

DWORD CPressure::Pressure(BYTE *pDest,BYTE *pScr,DWORD Size)
{
register BYTE c = 0,last = *pScr, count = 1;

while(--Size)
{
if( (c = *(++pScr)) == last)
{
if(++count == 0x3f)
{
ENCPUT(count,last);
count = 0;
}
}
else
{
if(count)ENCPUT(count,last);
last = c,count = 1;
}
}

if(count)ENCPUT(count,last);

return (DWORD)pDest;
}


DWORD CPressure::ZipUnPressure(BYTE *pDest,BYTE *pScr,DWORD Size)
{
z_stream packet;memset(&packet,0,sizeof(z_stream));
inflateInit(&packet);
packet.next_in = (Bytef* )pScr;
packet.avail_in = Size;
packet.next_out = (Bytef* )pDest;
packet.avail_out = Size;
inflate(&packet,Z_FINISH);
inflateEnd(&packet);
return (DWORD)pScr + packet.total_out; //newsz
}

DWORD CPressure::ZipPressure(BYTE *pDest,BYTE *pScr,DWORD Size)
{
z_stream packet;memset(&packet,0,sizeof(z_stream));
deflateInit(&packet,Z_DEFAULT_COMPRESSION);//Z_DEFAULT_COMPRESSION//Z_BEST_COMPRESSION//Z_BEST_SPEED packet.next_in = (Bytef* )pScr; packet.avail_in = Size; packet.next_out = (Bytef* )pDest; packet.avail_out = Size; deflate(&packet,Z_FINISH); return (DWORD)pDest + packet.total_out; //newsz}bool CPressure::Save(BYTE *pMem,DWORD Size){ if(!m_pPackMem) return false; //Size = Pressure(m_pPackMem,pMem,Size)-(DWORD)m_pPackMem; Size = ZipPressure(m_pPackMem,pMem,Size)-(DWORD)m_pPackMem; if(!fwrite(&Size,sizeof(Size),1,m_fp)) return false; if(!fwrite(m_pPackMem,Size,1,m_fp)) return false; return true;//fwrite(pMem,Size,1,m_fp);//origsz}bool CPressure::Load(BYTE *pMem,DWORD Size){ if(!m_pPackMem) return false; DWORD sz; if(!fread(&sz,sizeof(sz),1,m_fp)) return false; if(!fread(m_pPackMem,sz,1,m_fp)) return false; Size = ZipUnPressure(pMem,m_pPackMem,Size)-(DWORD)pMem; //Size = UnPressure(pMem,m_pPackMem,Size)-(DWORD)pMem; return true;//fread(m_pPackMem,Size,1,m_fp);//origsz}bool CPressure::Open(TCHAR *pFname,TCHAR *pMd, DWORD MaxSz){ Close(); if(!(m_pPackMem = new BYTE[MaxSz])) return false; return (m_fp = _tfopen(pFname,pMd));}void CPressure::Close(void){ if(m_pPackMem) delete m_pPackMem,m_pPackMem = 0; if(m_fp) fclose(m_fp),m_fp = 0;}
Ähnliche Themen
Film aus ZDF Mediathek speichern?

Möchte gern aus der ZDF-Mediathek den Film "Die Rebellin Teil 1" auf Festplatte speichern. Habe Quicktime Pro installiert, aber leider sehe ich im Browserfenster nur das...

Film speichern dauert ewig

Hallo, ich habe mit dem Windows Movie Maker (unter Windows XP) einen Film erstellt, genauer gesagt ist es eine Diashow mit zwei kurzen Videos. Insgesamt dauert der Film ca....

Digi mit kurzer Verschlußzeit und schneller Bildfolge?

Anknüpfend an den Beitrag unter "Erfahrungen mit Luftaufnahmen" habe ich gemerkt, daß analoge Kameras doch auch Vorteile haben. Nachdem ich dachte, meine zig Kilo analogen...

Film auf DVD speichern?

Ich wollte meinen fertig bearbeiteten Videofilm mittels "Nero" auf DVD brennen. "Nero" konnte aber kein DVD taugliches Format finden. Wie kann ich meinen bearbeiteten Film...

Slideshow als Film speichern

Möchte gerne meine Pränsentation als Film mit Ton(zB AVI) speichern. Kennt jemand eine Software, die den Bildschirminhalt filmen kann?


Alle Zeitangaben in WEZ. Es ist jetzt 17:52 Uhr. | Privacy Policy