Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Работа с AVI (пиксели).

27K
28 марта 2007 года
artberry
1 / / 28.03.2007
Люди добрые, помогите разаобраться в содранной программе.
Содрал из урока. (Спасибо за ссылку Zoobastik). Но разобраться толком не могу. "Я ведь еще не волшебник, я только учусь...". А надо очень.
Прошу вас откликнитесь.

Вопрос такой: Нужно получить цвет пискеля из видео потока, открытого файла.

Если я правильно понимаю, то поток загружен в память, но ввиде каких данных мне непонятно. Мне говорили, что можно оперировать с data, для получения цветов пикселя, но я ни как не могу понять как? Сам не понял, что написал.

Вощем текст программы вот. А получить надо цвет пикселя.

[FONT="Courier New"][FONT="Courier New"]// avi.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <windows.h> // Заголовочный файл Windows
#include <vfw.h> // Заголовочный файл для "Видео для Windows"

#using <mscorlib.dll>
using namespace System;

#pragma comment( lib, "vfw32.lib" ) // Искать VFW32.lib при линковке

#ifndef CDS_FULLSCREEN // CDS_FULLSCREEN не определяется некоторыми
#define CDS_FULLSCREEN 4 // компиляторами. Определяем эту константу
#endif // Таким образом мы можем избежать ошибок

AVISTREAMINFO psi; // Указатель на структуру содержащую информацию о
PAVISTREAM pavi; // Дескриптор для открытия потока
PGETFRAME pgf; // Указатель на объект GetFrame
BITMAPINFOHEADER bmih; // Заголовочная информация для DrawDibDraw декодирования

HDRAWDIB hdd; // Дескриптор для нашего рисунка
HBITMAP hBitmap; // Дескриптор устройства растра
HDC hdc = CreateCompatibleDC(0); // Создание совместимого контекста устройства
unsigned char* data = 0; // Указатель на наше измененное в размерах изображение
char *pdata; // Указатель на данные текстуры

void OpenAVI(LPCSTR szFile) // Вскрытие AVI файла (szFile)
{
AVIFileInit(); // Открывает файл

// Открытие AVI потока
if (AVIStreamOpenFromFile(&pavi, szFile, streamtypeVIDEO, 0, OF_READ, NULL) !=0)
{
// Если ошибка
MessageBox (HWND_DESKTOP, "Failed To Open The AVI Stream", "Error", MB_OK | MB_ICONEXCLAMATION);
}

AVIStreamInfo(pavi, &psi, sizeof(psi)); // Записываем информацию о потоке в psi

bmih.biSize = sizeof (BITMAPINFOHEADER); // Размер BitmapInfoHeader'а
bmih.biPlanes = 1; // Размер
bmih.biBitCount = 24; // Формат битов
bmih.biWidth = 256; // Ширина(256 пикселов)
bmih.biHeight = 256; // Высота(256 пикселов)
bmih.biCompression = BI_RGB; // Цветовой режим (RGB)

hBitmap = CreateDIBSection (hdc, (BITMAPINFO*)(&bmih), DIB_RGB_COLORS, (void**)(&data), NULL, NULL);
SelectObject (hdc, hBitmap); // Выбор hBitmap в наш контекст устройства (hdc)
pgf=AVIStreamGetFrameOpen(pavi, NULL); // Создание PGETFRAME с нужными нам параметрами

if (pgf==NULL)
{
// Если ошибка
MessageBox (HWND_DESKTOP, "Failed To Open The AVI Frame", "Error", MB_OK | MB_ICONEXCLAMATION);
}
}

void GrabAVIFrame(int frame) // Захват кадра
{
LPBITMAPINFOHEADER lpbi; // Содержит BitmapInfoHeader
// Получение данных из потока
lpbi = (LPBITMAPINFOHEADER)AVIStreamGetFrame(pgf, frame);
// Указатель на данные возвращенные AVIStreamGetFrame
// (Пропуск заголовка для получения указателя на данные)
pdata=(char *)lpbi+lpbi->biSize+lpbi->biClrUsed * sizeof(RGBQUAD);
//flipIt(data); // Перестановка красных и синих байтов
}


void CloseAVI(void) // Функция закрытия
{
DeleteObject(hBitmap); // Уничтожение устройства растра
DrawDibClose(hdd); // Закрытие контекста DrawDib устройства
AVIStreamGetFrameClose(pgf); // Закрытие объекта GetFrame
AVIStreamRelease(pavi); // Завершение потока
AVIFileExit(); // Закрытие файла
}
int _tmain()
{
OpenAVI("c:\\im20\\box.avi");
GrabAVIFrame(1);
CloseAVI();
//Console::WriteLine (data[2]);
Console::ReadLine ();
return 0;
} [/FONT][/FONT]

Спасибо.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог