typedef struct tagBITMAPINFOHEADER {
DWORD biSize;
LONG biWidth;
LONG biHeight;
WORD biPlanes;
WORD biBitCount;
DWORD biCompression;
DWORD biSizeImage;
LONG biXPelsPerMeter;
LONG biYPelsPerMeter;
DWORD biClrUsed;
DWORD biClrImportant;
} BITMAPINFOHEADER, FAR *LPBITMAPINFOHEADER, *PBITMAPINFOHEADER;
ΠΠ΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠΎΠ»Ρ ΡΡΡΡΠΊΡΡΡΡ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, biXPelsPerMeter ΠΈ biYPelsPerMeter) Π½Π΅ ΠΈΠΌΠ΅ΡΡ ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΡ ΠΊ AVI-ΡΠ°ΠΉΠ»Π°ΠΌ, Π½ΠΎ ΡΠ°ΠΊΠΈΡ ΠΏΠΎΠ»Π΅ΠΉ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ. Π Π°Π·ΠΌΠ΅ΡΡ, Π³Π»ΡΠ±ΠΈΠ½Π° ΠΏΠΈΠΊΡΠ΅Π»Π΅ΠΉ, Π°Π»Π³ΠΎΡΠΈΡΠΌ ΡΠΆΠ°ΡΠΈΡ ΠΈ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΠ²Π΅ΡΠΎΠ² β Π²ΡΠ΅ ΡΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π²Π·ΡΡΡ ΠΈΠ· ΡΡΡΡΠΊΡΡΡΡ BITMAPINFOHEADER ΠΏΠΎΡΠ»Π΅ ΡΡΠΏΠ΅ΡΠ½ΠΎΠ³ΠΎ Π²ΡΠ·ΠΎΠ²Π° ΡΡΠ½ΠΊΡΠΈΠΈ AVIStreamReadFormat().
ΠΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΡΠ΅ ΡΠ²Π΅Π΄Π΅Π½ΠΈΡ ΠΎ ΠΏΠΎΡΠΎΠΊΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡΡΠΈΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ AVIStreamInfo(). Π€ΡΠ½ΠΊΡΠΈΡ AVIStreamInfo(), ΠΊΠ°ΠΊ ΠΈ ΡΡΠ½ΠΊΡΠΈΡ AVIStreamReadFormat(), ΠΏΠΎΠ»ΡΡΠ°Π΅Ρ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ° Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΈΠΉ Π½ΠΎΠΌΠ΅Ρ ΠΈ Π·Π°ΠΏΠΎΠ»Π½ΡΠ΅Ρ ΡΡΡΡΠΊΡΡΡΡ Π΄Π°Π½Π½ΡΠΌΠΈ ΠΎ ΠΏΠΎΡΠΎΠΊΠ΅. ΠΠ»Ρ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠΈ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ AVIStreamInfo() ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΡΡΡΡΠΊΡΡΡΡ AVISTREAMINFO. ΠΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π² ΡΠ°ΠΉΠ»Π΅ vfw.h Π²ΡΠ³Π»ΡΠ΄ΠΈΡ ΡΠ°ΠΊ:
typedef struct _AVISTREAMINFOW {
DWORD fccType;
DWORD fccHandler;
DWORD dwFlags;
DWORD dwCaps;
WORD wPriority;
WORD wLanguage;
DWORD dwScale;
DWORD dwRate;
DWORD dwStart;
DWORD dwLength;
DWORD dwInitialFrames;
DWORD dwSuggestedBufferSize;
DWORD dwQuality;
DWORD dwSampleSize;
RECT rcFrame;
DWORD dwEditCount;
DWORD dwFormatChangeCount;
WCHAR szName[64];
} AVISTREAMINFOW, FAR * LPAVISTREAMINFOW;
ΠΠ°Π²Π°ΠΉΡΠ΅ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΊΠ»ΡΡΠ΅Π²ΡΠ΅ ΠΏΠΎΠ»Ρ ΡΡΠΎΠΉ ΡΡΡΡΠΊΡΡΡΡ. ΠΠ΅ΡΠ²ΠΎΠ΅ ΠΏΠΎΠ»Π΅, fccType, ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ ΡΠΈΠΏ ΠΏΠΎΡΠΎΠΊΠ°. Π ΡΠ°ΠΉΠ»Π°Ρ ΡΠΎΡΠΌΠ°ΡΠ° AVI ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡΡΡ ΡΠ΅ΡΡΡΠ΅ ΡΠΈΠΏΠ° ΠΏΠΎΡΠΎΠΊΠΎΠ²ΡΡ Π΄Π°Π½Π½ΡΡ : Π²ΠΈΠ΄Π΅ΠΎ, Π°ΡΠ΄ΠΈΠΎ, MIDI (ΠΌΡΠ·ΡΠΊΠ°) ΠΈ ΡΠ΅ΠΊΡΡ. Π ΡΡΠΎΠΉ ΠΊΠ½ΠΈΠ³Π΅ Π±ΡΠ΄ΡΡ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°ΡΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π²ΠΈΠ΄Π΅ΠΎΠΏΠΎΡΠΎΠΊΠΈ.
ΠΡΠΎΡΠΎΠ΅ ΠΏΠΎΠ»Π΅ ΡΡΡΡΠΊΡΡΡΡ AVISTREAMINFO, fccHandler, ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ Π°Π»Π³ΠΎΡΠΈΡΠΌ ΡΠΆΠ°ΡΠΈΡ, ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½Π½ΡΠΉ ΠΏΡΠΈ ΡΠΎΡ ΡΠ°Π½Π΅Π½ΠΈΠΈ Π²ΠΈΠ΄Π΅ΠΎΠΏΠΎΡΠΎΠΊΠ°. ΠΠ°ΠΊ Π²Ρ Π²ΡΠΊΠΎΡΠ΅ ΡΠ²ΠΈΠ΄ΠΈΡΠ΅, Π² Video For Windows ΡΡΠΎ ΠΏΠΎΠ»Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Β«Π΄Π΅ΠΊΠΎΠΌΠΏΡΠ΅ΡΡΠΎΡΠΎΠ²Β», ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠΏΠΎΡΠΎΠ±Π½Ρ Π²ΠΎΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠΆΠ°ΡΡΠΉ ΠΊΠ°Π΄Ρ ΠΈΠ· ΠΏΠΎΡΠΎΠΊΠ°.
ΠΠΎΠ»Π΅ dwStart ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ ΠΈΠ½Π΄Π΅ΠΊΡ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ ΠΊΠ°Π΄ΡΠ° ΠΏΠΎΡΠΎΠΊΠ° (ΡΡΠΎ Π²Π°ΠΆΠ½ΠΎ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΠΏΠ΅ΡΠ²ΡΠΉ ΠΊΠ°Π΄Ρ Π²ΠΈΠ΄Π΅ΠΎΡΠΎΠ»ΠΈΠΊΠ° ΠΌΠΎΠΆΠ΅Ρ ΠΈΠΌΠ΅ΡΡ ΠΈΠ½Π΄Π΅ΠΊΡ 0 ΠΈΠ»ΠΈ 1). ΠΡΡ ΠΆΠ΅ Π²Π΅Π»ΠΈΡΠΈΠ½Ρ ΠΌΠΎΠΆΠ½ΠΎ Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ AVIStreamStart().Π ΠΏΠΎΠ»Π΅ dwLength Ρ ΡΠ°Π½ΠΈΡΡΡ ΠΎΠ±ΡΠ΅Π΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΊΠ°Π΄ΡΠΎΠ² Π²ΠΈΠ΄Π΅ΠΎΡΠΎΠ»ΠΈΠΊΠ°. ΠΠ³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π»ΠΈΠ±ΠΎ Π²Π·ΡΡΡ ΠΈΠ· ΡΡΡΡΠΊΡΡΡΡ AVISTREAMINFO, Π»ΠΈΠ±ΠΎ ΠΏΠΎΠ»ΡΡΠΈΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ AVIStreamLength().
Π’Π΅ΠΏΠ΅ΡΡ ΠΌΡ Π·Π½Π°Π΅ΠΌ, ΠΊΠ°ΠΊ ΠΎΡΠΊΡΡΡΡ Π²ΠΈΠ΄Π΅ΠΎΠΏΠΎΡΠΎΠΊ ΠΈ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΡΠ²Π΅Π΄Π΅Π½ΠΈΡ ΠΎ Π½Π΅ΠΌ. ΠΠΎΠΆΠ½ΠΎ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄ΠΈΡΡ ΠΊ ΠΏΡΠΎΡΠ΅ΡΡΡ ΡΡΠ΅Π½ΠΈΡ ΠΈ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ Π²ΠΈΠ΄Π΅ΠΎΠΊΠ°Π΄ΡΠΎΠ². Π§ΡΠ΅Π½ΠΈΠ΅ ΠΊΠ°Π΄ΡΠΎΠ² Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ AVIStreamRead(). ΠΡΠ° ΡΡΠ½ΠΊΡΠΈΡ, ΠΏΠΎΠ»ΡΡΠΈΠ² Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΈΠΉ Π½ΠΎΠΌΠ΅Ρ ΠΏΠΎΡΠΎΠΊΠ° ΠΈ ΠΈΠ½Π΄Π΅ΠΊΡ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΡΡΡΠ΅Π³ΠΎ Π½Π°Ρ ΠΊΠ°Π΄ΡΠ°, ΠΏΠΎΠΌΠ΅ΡΠ°Π΅Ρ Π΄Π°Π½Π½ΡΠ΅ ΠΊΠ°Π΄ΡΠ° Π² Π±ΡΡΠ΅Ρ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΡ ΡΠ°ΠΊΠΆΠ΅ Π΄ΠΎΠ»ΠΆΠ½Ρ Π΅ΠΉ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ. ΠΠ°Π½Π½ΡΠ΅ ΠΊΠ°Π΄ΡΠ° Ρ ΡΠ°Π½ΡΡΡΡ Π² ΡΠΆΠ°ΡΠΎΠΌ Π²ΠΈΠ΄Π΅, ΠΏΠΎΡΡΠΎΠΌΡ ΠΏΠ΅ΡΠ΅Π΄ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ ΠΈΡ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π²ΠΎΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ.
ΠΠ»Ρ Π²ΠΎΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ ΠΊΠ°Π΄ΡΠΎΠ² ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ ICDecompress(). ΠΠ½Π° ΠΏΠΎΠ»ΡΡΠ°Π΅Ρ Π΄Π²Π° Π±ΡΡΠ΅ΡΠ°: Π² ΠΎΠ΄Π½ΠΎΠΌ Π½Π°Ρ ΠΎΠ΄ΡΡΡΡ ΡΠΆΠ°ΡΡΠ΅ Π΄Π°Π½Π½ΡΠ΅, Π° Π² Π΄ΡΡΠ³ΠΎΠΉ Π±ΡΠ΄Π΅Ρ ΠΏΠΎΠΌΠ΅ΡΠ΅Π½ Π²ΠΎΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π½ΡΠΉ ΠΊΠ°Π΄Ρ. Π€ΡΠ½ΠΊΡΠΈΠΈ ICDecompress() ΡΠ°ΠΊΠΆΠ΅ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΈΠΉ Π½ΠΎΠΌΠ΅Ρ Π΄Π΅ΠΊΠΎΠΌΠΏΡΠ΅ΡΡΠΎΡΠ°, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΠΎΠ³ΠΎ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ ICDecompress() Π΄Π»Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΡΠΆΠ°ΡΡΡ Π΄Π°Π½Π½ΡΡ .
ΠΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΈΠΉ Π½ΠΎΠΌΠ΅Ρ Π΄Π΅ΠΊΠΎΠΌΠΏΡΠ΅ΡΡΠΎΡΠ° ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ ICDecompressOpen(). ΠΠΎ ΠΎΠΏΠΈΡΠ°Π½ΠΈΡ Π²ΠΈΠ΄Π΅ΠΎΠ΄Π°Π½Π½ΡΡ ΡΡΠ½ΠΊΡΠΈΡ ICDecompressOpen() ΠΈΡΠ΅Ρ Π΄Π΅ΠΊΠΎΠΌΠΏΡΠ΅ΡΡΠΎΡ Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΎΠΉ Π½ΡΠΆΠ½ΠΎΠ³ΠΎ Π°Π»Π³ΠΎΡΠΈΡΠΌΠ° Π²ΠΎΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ.
ΠΠΎΡΠ»Π΅ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ ΡΠ°Π±ΠΎΡΡ Ρ ΠΏΠΎΡΠΎΠΊΠΎΠΌ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π·Π°ΠΊΡΡΡΡ Π΅Π³ΠΎ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ AVIStreamRelease(). ΠΠΎΡΠ»Π΅ Π²ΡΠ·ΠΎΠ²Π° ΡΡΠ½ΠΊΡΠΈΠΈ AVIStreamRelease() Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΈΠΉ Π½ΠΎΠΌΠ΅Ρ ΠΏΠΎΡΠΎΠΊΠ° ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ Π½Π΅Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΡΠΌ (Π΄ΠΎ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎΠ³ΠΎ ΠΎΡΠΊΡΡΡΠΈΡ ΠΏΠΎΡΠΎΠΊΠ°). ΠΠ°ΠΊΠΎΠ½Π΅Ρ, ΠΏΠ΅ΡΠ΅Π΄ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΠ΅ΠΌ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π²ΡΠ·Π²Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΡ AVIFileExit(), ΠΊΠΎΡΠΎΡΠ°Ρ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°Π΅Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΡΠ΅ ΠΌΠΎΠ΄ΡΠ»ΠΈ VFW.
ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° AviPlay
ΠΠΎΡΠ° Π±ΡΠ°ΡΡΡΡ Π·Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅. ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΡ AviPlay, ΠΊΠ°ΠΊ ΠΈ Π²ΡΠ΅ ΠΎΡΡΠ°Π»ΡΠ½ΡΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°Π΅ΠΌΡΠ΅ Π² ΡΡΠΎΠΉ ΠΊΠ½ΠΈΠ³Π΅, ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡΠΈ Π½Π° CD-ROM.
ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° AviPlay ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ Video For Windows Π΄Π»Ρ ΠΎΡΠΊΡΡΡΠΈΡ ΠΈ Π²ΠΎΡΠΏΡΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΡ AVI-ΡΠ°ΠΉΠ»ΠΎΠ² Π½Π° ΠΏΠΎΠ²Π΅ΡΡ Π½ΠΎΡΡΡΡ DirectDraw. ΠΠ½Π° ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π²ΡΠ±ΡΠ°ΡΡ Π»ΡΠ±ΠΎΠΉ AVI-ΡΠ°ΠΉΠ» ΠΈ Π·Π°Π΄Π°ΡΡ Π²ΠΈΠ΄Π΅ΠΎΡΠ΅ΠΆΠΈΠΌ Π΄Π»Ρ Π²ΠΎΡΠΏΡΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΡ ΡΠΎΠ»ΠΈΠΊΠ°. ΠΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ Π΄Π»Ρ Π²ΡΠ±ΠΎΡΠ° ΡΠ°ΠΉΠ»Π° ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΎ Π½Π° ΡΠΈΡ. 8.1.
Π ΠΈΡ. 8.1. ΠΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ Π΄Π»Ρ Π²ΡΠ±ΠΎΡΠ° AVI-ΡΠ°ΠΉΠ»Π° Π² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅ AviPlay
ΠΡΠ»ΠΈ Π²Ρ Π΅ΡΠ΅ Π½Π΅ ΡΡΠΏΠ΅Π»ΠΈ ΠΎΠΏΡΠΎΠ±ΠΎΠ²Π°ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ AviPlay ΠΈ Π½Π΅ ΠΎΠ±Π½Π°ΡΡΠΆΠΈΠ»ΠΈ ΡΡΠΎΠ³ΠΎ ΡΠ°ΠΌΠΈ, Ρ Ρ ΠΎΡΡ ΡΠΊΠ°Π·Π°ΡΡ Π½Π° Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π²Π΅ΡΠ΅ΠΉ, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΡΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π½Π΅ ΡΠΌΠ΅Π΅Ρ Π΄Π΅Π»Π°ΡΡ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΎΠ½Π° Π½Π΅ Π²ΠΎΡΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ Π°ΡΠ΄ΠΈΠΎΠΏΠΎΡΠΎΠΊΠΈ ΠΈΠ· Π²ΡΠ±ΡΠ°Π½Π½ΠΎΠ³ΠΎ AVI-ΡΠ°ΠΉΠ»Π°, Π° Π»ΠΈΡΡ ΠΈΠ·Π²Π»Π΅ΠΊΠ°Π΅Ρ ΠΈ Π²ΠΎΡΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΡΡ ΡΠ°ΡΡΡ ΡΠ°ΠΉΠ»Π°.
ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π½Π΅ ΠΏΡΡΠ°Π΅ΡΡΡ ΡΠΏΡΠ°Π²Π»ΡΡΡ ΡΠ°ΡΡΠΎΡΠΎΠΉ Π²ΡΠ²ΠΎΠ΄Π° ΠΊΠ°Π΄ΡΠΎΠ²; Π²ΡΠ΅ ΠΊΠ°Π΄ΡΡ ΠΈΠ·Π²Π»Π΅ΠΊΠ°ΡΡΡΡ ΠΈ Π²ΠΎΡΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡΡΡ Ρ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠΉ ΡΠΊΠΎΡΠΎΡΡΡΡ. Π ΠΊΠ°ΠΆΠ΄ΠΎΠΌ AVI-ΡΠ°ΠΉΠ»Π΅ ΠΏΡΠΈΡΡΡΡΡΠ²ΡΡΡ Ρ ΡΠΎΠ½ΠΎΠΌΠ΅ΡΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ Π΄Π°Π½Π½ΡΠ΅, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ Π²ΡΠ΅ΠΌΠΈ ΠΏΠΎΠ»Π½ΠΎΡΠ΅Π½Π½ΡΠΌΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°ΠΌΠΈ Π΄Π»Ρ Π²ΠΎΡΠΏΡΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΡ AVI-ΡΠ°ΠΉΠ»ΠΎΠ².
ΠΡΠ΅ ΠΎΠ΄Π½Π° ΠΏΠΎΠ»Π΅Π·Π½Π°Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ, ΠΊΠΎΡΠΎΡΠ°Ρ Π±Ρ ΠΏΡΠΈΠ³ΠΎΠ΄ΠΈΠ»Π°ΡΡ Π² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅ AviPlay, β ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° 16- ΠΈ 24-Π±ΠΈΡΠ½ΡΡ Π²ΠΈΠ΄Π΅ΠΎΡΠ΅ΠΆΠΈΠΌΠΎΠ². Π ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½Π½ΠΎΠΌ Π²Π°ΡΠΈΠ°Π½ΡΠ΅ Π²ΡΠ΅Π³Π΄Π° ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡΡΡ 8-Π±ΠΈΡΠ½ΡΠ΅ ΡΠ΅ΠΆΠΈΠΌΡ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎ ΠΎΡ Π³Π»ΡΠ±ΠΈΠ½Ρ ΠΏΠΈΠΊΡΠ΅Π»Π΅ΠΉ Π²ΠΎΡΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΠΌΠΎΠ³ΠΎ ΡΠΎΠ»ΠΈΠΊΠ°.
ΠΠ»Π°ΡΡ AviPlayWinΠΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²ΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠ΅ΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ AviPlay ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Π΅ΡΡΡ ΠΊΠ»Π°ΡΡΠΎΠΌ AviPlayWin, ΠΊΠΎΡΠΎΡΡΠΉ Π½Π°ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΡ DirectDraw ΠΎΡ ΠΊΠ»Π°ΡΡΠ° DirectDrawWin. Π ΠΎΡΠ»ΠΈΡΠΈΠ΅ ΠΎΡ Π΄ΡΡΠ³ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ ΡΡΠΎΠΉ ΠΊΠ½ΠΈΠ³ΠΈ ΠΊΠ»Π°ΡΡ AviPlayWin ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ Π΄Π»Ρ Π²ΡΠ±ΠΎΡΠ° ΡΠ°ΠΉΠ»Π°. ΠΠΌΠ΅ΡΡΠΎ ΡΠΎΠ³ΠΎ ΡΡΠΎΠ±Ρ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ ΠΏΠΎΠ²Π΅ΡΡ Π½ΠΎΡΡΠΈ ΠΏΡΠΈ Π·Π°ΠΏΡΡΠΊΠ΅, ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° AviPlay (ΠΊΠ°ΠΊ ΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° BmpView ΠΈΠ· Π³Π»Π°Π²Ρ 5) ΠΎΠΆΠΈΠ΄Π°Π΅Ρ, ΠΏΠΎΠΊΠ° ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π²ΡΠ±Π΅ΡΠ΅Ρ ΡΠ°ΠΉΠ». ΠΠ°ΡΠ΅ΠΌ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΡΠΎΠ·Π΄Π°Π΅Ρ ΠΏΠΎΠ²Π΅ΡΡ Π½ΠΎΡΡΠΈ ΠΈ Π½Π°ΡΡΡΠ°ΠΈΠ²Π°Π΅Ρ ΠΈΡ Π² ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠΈ Ρ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΡΠΌ Π²ΡΠ±ΡΠ°Π½Π½ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π°. ΠΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΊΠ»Π°ΡΡΠ° AviPlayWin ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½ΠΎ Π² Π»ΠΈΡΡΠΈΠ½Π³Π΅ 8.1.
ΠΠΈΡΡΠΈΠ½Π³ 8.1. ΠΠ»Π°ΡΡ AviPlayWin
class AviPlayWin : public DirectDrawWin {
public:
AviPlayWin();
protected:
//{{AFX_MSG(AviPlayWin)
afx_msg void OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags);
afx_msg void OnRButtonDown(UINT nFlags, CPoint point);
afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
afx_msg void OnDestroy();
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
private:
int SelectInitialDisplayMode();
BOOL CreateCustomSurfaces() {
return TRUE;
}
void DrawScene();
void RestoreSurfaces();
void GetSystemPalette();
void ShowDialog();
BOOL LoadAvi();
BOOL CreateAviSurface();
BOOL UpdateAviSurface();
BOOL InstallPalette();
private:
AviDialog* avidialog;
CString fullfilename;
CString filename;
CString pathname;
CRect displayrect;
LPDIRECTDRAWSURFACE avisurf;
CRect avirect;
int x,y;
DisplayModeArray displaymode;
LPDIRECTDRAWPALETTE syspal;
LPDIRECTDRAWPALETTE avipal;
PAVISTREAM avistream;
AVISTREAMINFO streaminfo;
HIC decomp;
long fmtlen, buflen;
long startframe, endframe;
long curframe;
LPBITMAPINFOHEADER srcfmt;
LPBITMAPINFOHEADER dstfmt;
BYTE* rawdata;
BYTE* finaldata;
};
Π‘Π½Π°ΡΠ°Π»Π° ΠΌΡ ΠΎΠ±ΡΡΠ²Π»ΡΠ΅ΠΌ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ ΠΊΠ»Π°ΡΡΠ° AviPlayWin, ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½Π½ΡΠΉ ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΠΊΠ»Π°ΡΡΠ°.
Π ΠΊΠ»Π°ΡΡΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Ρ ΡΠ΅ΡΡΡΠ΅ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ° ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ: OnKeyDown(), OnRButtonDown(), OnCreate() ΠΈ OnDestroy(). Π€ΡΠ½ΠΊΡΠΈΡ OnKeyDown() ΡΠ»Π΅Π΄ΠΈΡ Π·Π° Π½Π°ΠΆΠ°ΡΠΈΠ΅ΠΌ ΠΊΠ»Π°Π²ΠΈΡ Escape ΠΈ ΠΏΡΠΎΠ±Π΅Π»Π° Π²ΠΎ Π²ΡΠ΅ΠΌΡ Π²ΠΎΡΠΏΡΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΡ, ΠΏΡΠ΅ΡΡΠ²Π°Π΅Ρ ΡΠΎΠ»ΠΈΠΊ ΠΈ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°Π΅Ρ Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ Π΄Π»Ρ Π²ΡΠ±ΠΎΡΠ° AVI-ΡΠ°ΠΉΠ»Π° (ΠΌΡ ΠΌΠΎΠ³Π»ΠΈ Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ DirectInput, Π½ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° AviPlay Π½Π΅ ΡΡΠΎΠΈΡ ΠΏΠΎΠ΄ΠΎΠ±Π½ΡΡ Ρ Π»ΠΎΠΏΠΎΡ). Π€ΡΠ½ΠΊΡΠΈΡ OnRButtonDown() ΡΠΎΠΆΠ΅ Π²ΡΠ·ΡΠ²Π°Π΅Ρ Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ Π΄Π»Ρ Π²ΡΠ±ΠΎΡΠ° AVI-ΡΠ°ΠΉΠ»Π°, Π½ΠΎ ΠΏΠΎ ΡΠ΅Π»ΡΠΊΡ ΠΏΡΠ°Π²ΠΎΠΉ ΠΊΠ½ΠΎΠΏΠΊΠΈ ΠΌΡΡΠΈ. Π€ΡΠ½ΠΊΡΠΈΡ OnCreate() ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΠ΅Ρ DirectDraw ΠΈ AVI, Π° ΡΡΠ½ΠΊΡΠΈΡ OnDestroy() Π·Π°Π²Π΅ΡΡΠ°Π΅Ρ ΠΈΡ ΡΠ°Π±ΠΎΡΡ.
ΠΠ°ΡΠ΅ΠΌ ΠΌΡ ΠΎΠ±ΡΡΠ²Π»ΡΠ΅ΠΌ 10 Π·Π°ΠΊΡΡΡΡΡ (private) ΡΡΠ½ΠΊΡΠΈΠΉ. ΠΠ΅ΡΠ²ΠΎΠΉ ΠΈΠ΄Π΅Ρ ΡΡΠ½ΠΊΡΠΈΡ SelectInitialDisplayMode(), ΠΊΠΎΡΠΎΡΠ°Ρ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ ΡΡΠΈ Π·Π°Π΄Π°ΡΠΈ: Π²ΡΠ±ΠΎΡ ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π²ΠΈΠ΄Π΅ΠΎΡΠ΅ΠΆΠΈΠΌΠ° (ΡΠΎ, Π΄Π»Ρ ΡΠ΅Π³ΠΎ ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½Π° ΡΠ°ΠΌΠ° ΡΡΠ½ΠΊΡΠΈΡ), ΠΏΠΎΡΡΡΠΎΠ΅Π½ΠΈΠ΅ ΡΠΏΠΈΡΠΊΠ° 8-Π±ΠΈΡΠ½ΡΡ ΡΠ΅ΠΆΠΈΠΌΠΎΠ² Π΄Π»Ρ Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π° ΠΈ Π·Π°Ρ Π²Π°Ρ ΡΠΈΡΡΠ΅ΠΌΠ½ΠΎΠΉ ΠΏΠ°Π»ΠΈΡΡΡ. ΠΡΠΊΠΎΡΠ΅ ΠΌΡ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ ΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ. Π€ΡΠ½ΠΊΡΠΈΡ GetSystemPalette() Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ SelectInitialDisplayMode(); ΠΌΡ ΡΠ²ΠΈΠ΄ΠΈΠΌ, ΠΊΠ°ΠΊ ΠΎΠ½Π° ΡΠ°Π±ΠΎΡΠ°Π΅Ρ, ΠΏΡΠΈ Π·Π½Π°ΠΊΠΎΠΌΡΡΠ²Π΅ Ρ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅ΠΉ.
Π€ΡΠ½ΠΊΡΠΈΡ CreateCustomSurfaces() ΠΎΠ±ΡΡΠ²Π»Π΅Π½Π° Π²ΡΡΡΠΎΠ΅Π½Π½ΠΎΠΉ (inline). ΠΠ½Π° Π²ΡΠ΅Π³ΠΎ Π»ΠΈΡΡ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ TRUE, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΠΏΡΠΈ Π·Π°ΠΏΡΡΠΊΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΏΠΎΠ²Π΅ΡΡ Π½ΠΎΡΡΠΈ Π½Π΅ ΡΠΎΠ·Π΄Π°ΡΡΡΡ.
Π‘Π»Π΅Π΄ΡΡΡΠ°Ρ ΡΡΠ½ΠΊΡΠΈΡ, ShowDialog(), ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°Π΅Ρ Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ ΠΈ Π² ΡΠ»ΡΡΠ°Π΅ Π²ΡΠ±ΠΎΡΠ° Π΄ΠΎΠΏΡΡΡΠΈΠΌΠΎΠ³ΠΎ AVI-ΡΠ°ΠΉΠ»Π° Π·Π°Π³ΡΡΠΆΠ°Π΅Ρ Π΅Π³ΠΎ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ LoadAvi(). ΠΡΠ½ΠΎΠ²Π½Π°Ρ ΡΠ°ΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠ΅ΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Π΅ΡΡΡ ΡΡΠΈΠΌΠΈ Π΄Π²ΡΠΌΡ ΡΡΠ½ΠΊΡΠΈΡΠΌΠΈ, ΠΏΠΎΡΡΠΎΠΌΡ ΠΌΡ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ ΠΈΡ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎ.
ΠΠ° ΡΡΠ½ΠΊΡΠΈΠΉ LoadAvi() ΠΎΠ±ΡΡΠ²Π»ΡΠ΅ΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ DrawScene(). ΠΡ Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΅Ρ Π΄Π»Ρ Π²ΡΠ²ΠΎΠ΄Π° ΠΊΠ°Π΄ΡΠΎΠ² Π²ΠΈΠ΄Π΅ΠΎΡΠΎΠ»ΠΈΠΊΠ°. ΠΠΎΠΌΠΈΠΌΠΎ ΠΈΠ·Π²Π»Π΅ΡΠ΅Π½ΠΈΡ ΠΈ Π²ΠΎΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ ΠΊΠ°Π΄ΡΠΎΠ² Π²ΠΈΠ΄Π΅ΠΎΠΏΠΎΡΠΎΠΊΠ° DrawScene() ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅Ρ Π±Π»ΠΈΡΡΠΈΠ½Π³ ΠΈ ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΡΡΡΠ°Π½ΠΈΡ, Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΠ΅ Π΄Π»Ρ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ ΠΊΠ°Π΄ΡΠ°.