現在AVIファイルを一枚一枚取得して、画像処理をさせるプログラムを作成しています
取得した一枚のAVIファイルの表示は出来るのですが、取得した一枚のAVIデータの
輝度情報を取得取得するのはどのようにすればよいのでしょうか?
以下がコードの抜粋になります。
ご指導願います。
LPVOID loadFrame(LPCTSTR lpszAviFilePath, int iIndex) {
PAVIFILE pfAvi;
PAVISTREAM psAvi;
PGETFRAME pgfFrame;
BITMAPINFOHEADER bmiFrame;
LPVOID lpTmp, lpData;
//
if (AVIFileOpen(&pfAvi, lpszAviFilePath, OF_READ, NULL) != 0) {
return NULL;
}
//
ZeroMemory(&bmiFrame, sizeof(BITMAPINFOHEADER));
//
bmiFrame.biSize = sizeof(BITMAPINFOHEADER);
bmiFrame.biPlanes = 1;
bmiFrame.biBitCount = 24;
bmiFrame.biWidth = iAviWidth;
bmiFrame.biHeight = iAviHeight;
//
AVIFileGetStream(pfAvi, &psAvi, streamtypeVIDEO, 0);
//
pgfFrame = AVIStreamGetFrameOpen(psAvi, &bmiFrame);
//
lpTmp = AVIStreamGetFrame(pgfFrame, iIndex);
//
lpData = GlobalAlloc(GPTR,
sizeof(BITMAPINFOHEADER)
+ iAviWidth * iAviHeight * 3);
//
CopyMemory(lpData,
lpTmp,
sizeof(BITMAPINFOHEADER) + iAviWidth * iAviHeight * 3);
AVIStreamGetFrameClose(pgfFrame);
//
AVIStreamRelease(psAvi);
//
AVIFileRelease(pfAvi);
return lpData;
}
//////////////////表示////////////////////////
lpFrame = (LPBYTE)loadFrame(lpszAviFilePath, iAviIndex + 1);
if (lpFrame != NULL) {
//
lpbmiHead = (LPBITMAPINFOHEADER)lpFrame;
lpPixels = lpFrame + lpbmiHead->biSize;
//
iAviIndex++;
//
::InvalidateRgn(hWnd, NULL, FALSE);
}
//
hdc = ::BeginPaint(hWnd,&ps);
//
if (lpFrame != NULL) {
StretchDIBits(hdc, 5, 5, lpbmiHead->biWidth, lpbmiHead->biHeight,
0, 0, lpbmiHead->biWidth, lpbmiHead->biHeight,
lpPixels, (LPBITMAPINFO)lpbmiHead, DIB_RGB_COLORS,
SRCCOPY);
}
//
::EndPaint(hWnd, &ps);
無邪気に
> bmiFrame.biBitCount = 24;
> bmiFrame.biWidth = iAviWidth;
> bmiFrame.biHeight = iAviHeight;
としていますが、これでいいという訳が分かりません(知りたいです)
又、同様に
> lpData = GlobalAlloc(GPTR,
> sizeof(BITMAPINFOHEADER)
> + iAviWidth * iAviHeight * 3);
> //
> CopyMemory(lpData,
> lpTmp,
> sizeof(BITMAPINFOHEADER) + iAviWidth * iAviHeight * 3);
と iAviWidth * iAviHeight * 3 を用いていますが、これもこれで良いというわけが
知りたいですね
ところで輝度情報とは具体的に何を指していますか?
HSV/HSB HSL YCbCr/YPbr などいろいろな方式があります
Google などで 輝度 rgb と検索してみてください
StretchDIBits,DIB_RGB_COLORSで表示できてるってことは
AVIファイルからPixcel情報を取得できたってことじゃん。