Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
IWICBitmapCodecProgressNotification
Když kodek provádí vstupně-výstupní operaci, jako je CopyPixels na velkém obrázku, může trvat několik sekund nebo dokonce minut dokončení. Pokud koncoví uživatelé nemůžou přerušit dlouhotrvající operaci, můžou si myslet, že aplikace přestala reagovat. Uživatelé často zavřou aplikaci nebo dokonce restartují své počítače, když se pokusí znovu získat kontrolu nad počítačem, když aplikace přestane reagovat.
Toto rozhraní umožňuje aplikaci určit funkci zpětného volání, kterou kodek může volat v zadaných intervalech, aby volajícímu oznámil průběh aktuální operace. Aplikace může tuto funkci zpětného volání použít k zobrazení indikátoru průběhu v uživatelském rozhraní, aby uživatele informovala o stavu operace. Pokud uživatel klikne na tlačítko Zrušit v dialogovém okně Průběh, aplikace vrátí WINCODEC_ERR_ABORTED z funkce zpětného volání (callback). V takovém případě musí kodek zrušit zadanou operaci a propagovat tuto HRESULT zpět volajícímu metodě, která operaci prováděla.
Toto rozhraní by mělo být implementováno ve třídě dekodéru na úrovni kontejneru.
interface IWICBitmapCodecProgressNotification : public IUnknown
{
HRESULT RegisterProgressNotification (
PFNProgressNotification pfnProgressNotification,
LPVOID pvData,
DWORD dwProgressFlags );
}
- RegisterProgressNotification (registrace oznámení o průběhu)
- PFNProgressNotification
ZaregistrovatOznámeníProgresu
RegisterProgressNotification vyvolá aplikace k registraci funkce zpětného volání, kterou kodek může volat v zadaných intervalech. První parametr, pfnProgressNotification, je ukazatel na funkci zpětného volání, kterou má kodek volat v pravidelných intervalech.
Parametr pvData odkazuje na nějaký objekt, který volající chce, aby kodek předával zpět funkci zpětného volání při každém vyvolání funkce zpětného volání. Tento objekt může být vůbec cokoli a nemá pro kodek žádný zvláštní význam.
Parametr dwProgressFlags určuje, kdy má kodek volat funkci zpětného volání. Funkci OR lze provést se dvěma výčty pro tento parametr. výčet WICProgressOperation určuje, zda se má během dekódování volat funkce zpětného volání (WICProgressOperationCopyPixels), při kódování (WICProgressOperationWritePixels) nebo při obojím (WICProgressOperationAll).
enum WICProgressOperation
{
WICProgressOperationCopyPixels,
WICProgerssOperationWritePixels,
WICProgressOperationAll
};
Kodek by měl volat funkci zpětného volání v pravidelných intervalech v průběhu operace, ale volající může určit určité požadavky. WICProgressNotification typ enum udává, při jakém okamžiku v operaci má být zavolána funkce zpětného volání. Pokud volající určuje WICProgressNotificationBegin, musíte jej volat na začátku operace (0.0). Pokud volající toto nezadá, je nepovinné. Podobně, pokud volající specifikuje WICProgressNotificationEnd, musíte jej volat po dokončení operace (1.0). Pokud volající určuje WICProgressNotificationAll, musíte ho volat na začátku a na konci, stejně jako v pravidelných intervalech v průběhu operace. Volající může také zadat WICProgressNotificationFrequent, což označuje, že chtějí být zavoláni zpět s častými intervaly, třeba po každých několika řádcích skenování. (Volající obvykle použije tento příznak pouze pro velmi velký obrázek.) V opačném případě byste obvykle měli volat zpět v intervalech přibližně o 10 % přírůstků celkového počtu řádků skenování, které se mají zpracovat.
enum WICProgressNotification
{
WICProgressNotificationBegin,
WICProgerssNotificationEnd,
WICProgerssNotificationFrequent,
WICProgressNotificationAll
};
Pro konkrétní dekodér nebo instanci kodéru lze najednou zaregistrovat pouze jednu funkci zpětného volání. Pokud aplikace volá RegisterProgressNotification více než jednou, nahraďte dříve registrovanou funkci zpětného volání novou funkcí. Chcete-li zrušit registraci zpětného volání, volající nastaví parametr pfnProgressNotification na NULL.
PFNProgressNotification
PFNProgressNotification je funkce zpětného volání s následujícím podpisem.
typedef HRESULT (*PFNProgressNotification) (
LPVOID pvData,
ULONG uFrameNum,
WICProgressOperation operation,
double dblProgress );
Když vyvoláte funkci zpětného volání, použijte parametr pvData pro předání zpět stejného pvData, který aplikace zadala při registraci funkce zpětného volání.
Parametr uFrameNum by měl indikovat index zpracovávaného rámce.
Při kódování nastavte parametr operace na WICProgressOperationCopyPixels při dekódování a WICProgressOperationWritePixels.
Parametr dblProgress by měl být číslo v rozsahu 0,0 (začátek operace) a 1,0 (dokončení operace). Hodnota by měla odrážet podíl řádků skenování, které jsou již zpracovány vzhledem k celkovému počtu řádků skenování, které se mají zpracovat.
Související témata
-
referenční
-
koncepční
-
implementace IWICBitmapSource
-
Přehled komponent Windows Imaging