Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?
Hasło nie zostało zweryfikowane
Niniejsze hasło zostało opracowane, jednak nie zostało ono zweryfikowane przez administrację serwisu. Jeżeli znalazłeś błędy merytoryczne w niniejszym dokumencie, prosimy o ich zgłoszenie na forum w dziale Znalezione błędy.
Opracował: xevuel
Biblioteki C/C++

AVIMakeCompressedStream

[funkcja] Tworzy skompresowany strumień na bazie strumienia nieskompresowanego.

Składnia

C/C++
#include <vfw.h>

STDAPI AVIMakeCompressedStream(
PAVISTREAM * ppsCompressed,
PAVISTREAM psSources,
AVICOMPRESSOPTIONS * lpOptions,
CLSID * pclsidHandler
);

Argumenty

ArgumentOpis
ppsCompressedWskaźnik na bufor, do którego zostanie zapisany nowy skompresowany strumień
psSourcesWskaźnik na strumień, który ma być skompresowany
lpOptionsWskaźnik na strukturę, która przechowuje typ używanej kompresji oraz opcje
pclsidHandlerWskaźnik na identyfikator klasy używany do stworzenia strumienia

Zwracana wartość

Funkcja zwraca AVIERR_OK, jeśli jej działanie zakończyło się sukcesem, lub kod błędu w przeciwnym wypadku:
Zwrócony kodOpis
AVIERR_NOCOMPRESSORNie znaleziono odpowiedniego kompresora
AVIERR_MEMORYNie ma wystarczająco dużo pamięci, aby ukończyć operację
AVIERR_UNSUPPORTEDKompresja jest nieobsługiwana dla tego typu danych.

Opis szczegółowy

Funkcja AVIMakeCompressedStream tworzy nowy skompresowany strumień, do którego będzie można zapisywać dane.
C/C++
IAVIFile * pfile;
IAVIStream * ps;
HBITMAP hbm;

//...
// tutaj ładowanie bitmapy do pamięci. Uwaga! Jeśli otwieramy bitmapę z pliku, musimy użyć flagi LR_CREATEDIBSECTION!
//...

DIBSECTION dibs;
int sbm = GetObject( hbm, sizeof( dibs ), & dibs );
if( sbm != sizeof( DIBSECTION ) )
{
    //Wystąpił błąd
}

AVIFileInit();
HRESULT hr = AVIFileOpen( & pfile, "plik.avi", OF_WRITE | OF_CREATE, NULL );

AVISTREAMINFO strhdr;
ZeroMemory( & strhdr, sizeof( strhdr ) );
strhdr.fccType = streamtypeVIDEO; // typ strumienia
strhdr.fccHandler = 0;
strhdr.dwScale = 1000; //Dzielenie dwRate przez dwScale daje ilość klatek na sekundę
strhdr.dwRate = 1000;
strhdr.dwSuggestedBufferSize = dibs.dsBmih.biSizeImage;
SetRect( & strhdr.rcFrame, 0, 0, dibs.dsBmih.biWidth, dibs.dsBmih.biHeight );
hr = AVIFileCreateStream( pfile, & ps, & strhdr );
if( hr != AVIERR_OK )
{
    //Wystąpił błąd
}

AVICOMPRESSOPTIONS acopts;
IAVIStream * psCompressed;
ZeroMemory( & acopts, sizeof( acopts ) );
acopts.fccHandler = mmioFOURCC( 'D', 'I', 'B', ' ' ); //Po to była potrzebna flaga LR_CREATEDIBSECTION
hr = AVIMakeCompressedStream( & psCompressed, ps, & acopts, NULL );
if( hr != AVIERR_OK )
{
    //Wystąpił błąd
}

//psCompressed zawiera skompresowany strumień

//Zwalniamy pamięć

AVIStreamRelease( psCompressed );
AVIStreamRelease( ps );
AVIFileRelease( pfile );
AVIFileExit();

Wymagania

Minimalny obsługiwany klientWindows 2000 Professional
Minimalny obsługiwany serwerWindows 2000 Server
NagłówekVfh.h
BibliotekaVfw32.lib
DLLAvifil32.dll

Linki zewnętrzne