Schritt 2: Hinzufügen eines Menübefehls zum Greifen eines Posterrahmens
[Das dieser Seite zugeordnete Feature DirectShow ist ein Legacyfeature. Es wurde von MediaPlayer, IMFMediaEngine und Audio/Video Capture in Media Foundation abgelöst. Diese Features wurden für Windows 10 und Windows 11 optimiert. Microsoft empfiehlt dringend, dass neuer Code mediaPlayer, IMFMediaEngine und Audio/Video Capture in Media Foundation anstelle von DirectShow verwendet, wenn möglich. Microsoft schlägt vor, dass vorhandener Code, der die Legacy-APIs verwendet, so umgeschrieben wird, dass nach Möglichkeit die neuen APIs verwendet werden.]
[Diese API wird nicht unterstützt und kann in Zukunft geändert oder nicht mehr verfügbar sein.]
Dieses Thema ist Schritt 2 des Greifens eines Posterrahmens.
Fügen Sie als Nächstes einen Befehl hinzu, damit der Benutzer einen Posterrahmen aus einer Datei abrufen kann. Erstellen Sie ein Menüelement mit der Ressourcen-ID IDM_BITMAP, und fügen Sie der Fensterprozedur die folgende Fallanweisungen hinzu:
case WM_COMMAND:
switch (LOWORD(wparam))
{
case IDM_BITMAP:
{
HRESULT hr = DoShowBitmap(hwnd, &pbmi);
if (SUCCEEDED(hr))
{
pBuffer = reinterpret_cast<BYTE*>(pbmi) +
sizeof(BITMAPINFOHEADER);
InvalidateRect(hwnd, NULL, TRUE);
}
else
{
MessageBox(hwnd, TEXT("Cannot display the image."),
TEXT("Error"), MB_OK | MB_ICONERROR);
}
}
break; // IDM_BITMAP
}
break; // WM_COMMAND
Die DoShowBitmap-Funktion gibt den zugeordneten Puffer in pbmi zurück. Wenn die Funktion erfolgreich ist, wird die Adresse der Bitmap (
pBuffer
) kann als Offset von pbmi berechnet werden. Zeigen Sie in der DoShowBitmap-Funktion ein Dialogfeld Datei öffnen an, in dem der Benutzer eine Datei auswählen kann, und rufen Sie dann die anwendungsdefinierte GetBitmap-Funktion auf, die die Bitmap abruft:
HRESULT DoShowBitmap(HWND hwnd, BITMAPINFOHEADER** ppbmih)
{
OPENFILENAME ofn; // common dialog box structure
// Initialize OPENFILENAME (not shown).
// Display the Open File dialog box.
if (GetOpenFileName(&ofn) != TRUE) // failed to open file
{
return E_FAIL;
}
return GetBitmap(ofn.lpstrFile, ppbmih);
}
Weiter: Schritt 3: Implementieren der Frame-Grabbing-Funktion
Zugehörige Themen