AVIファイルからPixcel情報を取得したい

[戻る]
どざえもん 2008/12/02(火) 16:30:19
現在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);

しま 2008/12/02(火) 18:15:11
無邪気に
>    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 と検索してみてください

wclrp ( 'o') 2008/12/03(水) 08:02:54
StretchDIBits,DIB_RGB_COLORSで表示できてるってことは
AVIファイルからPixcel情報を取得できたってことじゃん。

古いスレッドには追加発言できません。