Overzicht van progressieve decodering
In dit onderwerp vindt u een inleiding tot progressieve decodering en het gebruik van progressieve decodering in toepassingen. Het biedt ook richtlijnen voor het maken van codecs die ondersteuning bieden voor progressieve decodering.
Dit onderwerp bevat de volgende secties.
- Inleiding
- Wat is Progressief Decoderen?
- Ondersteuning voor Progressieve Decodering in Windows 7
- JPEG Progressive Decoding-
- PNG/GIF progressive decoderen
- progressive decodering in toepassingen
- Aangepaste codec-ondersteuning voor progressieve decodering
- Verwante onderwerpen
Introductie
Progressieve decodering biedt de mogelijkheid om delen van een afbeelding incrementeel te decoderen en weer te geven voordat de volledige afbeelding is gedownload. Deze functie verbetert de gebruikerservaring aanzienlijk bij het weergeven van afbeeldingen van internet, omdat de gebruiker niet hoeft te wachten tot de volledige afbeelding is gedownload voordat de decodering kan beginnen. Gebruikers kunnen lang voordat de volledige afbeelding is gedownload een voorbeeld zien van een afbeelding met beschikbare gegevens. Deze functie is essentieel voor elke toepassing die wordt gebruikt om afbeeldingen van internet of van gegevensbronnen met beperkte bandbreedte weer te geven.
Het Windows Imaging Component (WIC) in Windows 7 ondersteunt progressieve decodering van populaire afbeeldingsindelingen zoals JPEG, PNG en GIF. WIC biedt ook ondersteuning voor alle niet-Microsoft-codecs met WIC die progressieve decodering implementeren. Progressieve codering wordt niet ondersteund in de huidige versie van WIC. In dit onderwerp vindt u een overzicht van progressieve decodering in Windows 7 en de procedure voor het inschakelen van progressieve decodering in uw toepassingen.
Wat is Progressive Decoding?
Progressieve decodering is de mogelijkheid om delen van een afbeelding incrementeel te decoderen van een onvolledig afbeeldingsbestand. Traditionele decodering vereist een volledig afbeeldingsbestand voordat decodering kan beginnen. Progressieve decodering begint nadat een progressief niveau van een afbeelding is gedownload. De decoder voert een decoderingsdoorgang uit op het huidige progressieve niveau van de afbeelding. Vervolgens worden meerdere decoderingspassen uitgevoerd op de afbeelding wanneer elk progressief niveau wordt gedownload. Elke decoderingspas onthult meer van de afbeelding totdat de afbeelding volledig is gedownload en gedecodeerd. Het aantal benodigde passes voor het decoderen van een volledig beeld is afhankelijk van de bestandsindeling van de afbeelding en het coderingsproces dat is gebruikt om de afbeelding te maken.
Afbeeldingen moeten specifiek worden gecodeerd om progressieve decodering te implementeren, maar niet alle afbeeldingsindelingen ondersteunen dit. De volgende lijst bevat een overzicht van de vereisten voor het gebruik van progressieve decodering.
- Het afbeeldingsbestand moet progressieve decodering ondersteunen. De meeste afbeeldingsindelingen ondersteunen geen progressieve decodering, hoewel de populaire afbeeldingsindelingen JPEG, PNG en GIF dat wel doen.
- Het afbeeldingsbestand moet worden gecodeerd als een progressieve afbeelding. Afbeeldingsbestanden die niet zijn gemaakt met de progressieve codering van afbeeldingen kunnen geen progressieve decodering implementeren, zelfs niet waar de bestandsindeling dit anders zou ondersteunen.
- Een codec die progressieve decodering ondersteunt, moet beschikbaar zijn. Als een codec geen ondersteuning biedt voor progressieve decodering, wordt een afbeelding die is gecodeerd als een progressieve afbeelding gedecodeerd als een traditionele afbeelding.
Ondersteuning voor progressieve decodering in Windows 7
Windows 7 biedt ingebouwde codecs die ondersteuning bieden voor progressieve decodering voor JPEG-, PNG- en GIF-afbeeldingsindelingen. Elk van deze Windows 7-codecs voert meerdere decoderingspassen uit op een afbeelding. Elke wachtwoord komt overeen met een bepaald niveau en een bepaald gedeelte van de afbeelding die wordt gedecodeerd, wat uiteindelijk leidt tot een volledig gedecodeerde afbeelding.
Elke afbeeldingsindeling verwerkt progressieve decodering op een andere manier. De volgende tabel bevat informatie over het aantal progressieve niveaus en de decoderingsmethode die wordt ondersteund door de progressieve decoderingsindelingen van Windows 7.
Afbeeldingsopmaak | Aantal ondersteunde progressieve niveaus | Methode voor progressieve decodering |
---|---|---|
JPEG | Gedefinieerd door afbeelding | Verbetering van de resolutie |
PNG | 7 | Tussenweven |
GIF | 4 | Interliniëring |
Daarnaast kan progressieve decodering worden geïmplementeerd in codecs door ondersteuning te bieden voor progressieve interfaces en methoden. Als progressieve decodering niet wordt ondersteund in een codec, moeten de juiste foutberichten worden geretourneerd als deze methoden worden aangeroepen.
JPEG Progressive Decoding
JPEG-progressieve decodering geeft afbeeldingsgegevens weer met steeds hogere resoluties voor elk niveau, totdat de afbeelding met volledige resolutie beschikbaar is. Elk niveau van de afbeelding is ingesteld op een ander resolutieniveau. Naarmate er meer progressieve niveaus beschikbaar komen, wordt de afbeelding weergegeven met hogere resoluties, totdat de afbeelding met volledige resolutie is opgelost.
Het aantal beschikbare niveaus en de resolutie die op elk niveau is ingesteld, is volledig afhankelijk van de gecodeerde JPEG. In de volgende twee afbeeldingen ziet u een voorbeeld van JPEG-progressieve decodering op twee progressieve niveaus.
De afbeelding aan de linkerkant wordt gedecodeerd op progressief niveau 0. De afbeelding aan de rechterkant wordt volledig gedecodeerd na vijf progressieve niveaus.
PNG/GIF Progressive Decodering
Zowel PNG- als GIF-progressieve decodering gebruiken een interlaced progressive decoderingsmethode. Het decoderingsproces voor beide indelingen is vergelijkbaar.
Progressieve decodering van PNG
PNG-afbeeldingsbestanden bieden zeven progressieve niveaus voor decodering, zoals beschreven in de PNG-specificatie. Progressieve PNG-decodering wordt geïmplementeerd door een opgegeven patroon van pixels op elke doorgang van de decoder te decoderen. Het patroon in de volgende tabel uit de PNG-specificatie wordt gerepliceerd over de hele afbeelding. Elk getal vertegenwoordigt het progressieve niveau waarin de bijbehorende pixel wordt gedecodeerd.
1 | 6 | 4 | 6 | 2 | 6 | 4 | 6 |
7 | 7 | 7 | 7 | 7 | 7 | 7 | 7 |
5 | 6 | 5 | 6 | 5 | 6 | 5 | 6 |
7 | 7 | 7 | 7 | 7 | 7 | 7 | 7 |
3 | 6 | 4 | 6 | 3 | 6 | 4 | 6 |
7 | 7 | 7 | 7 | 7 | 7 | 7 | 7 |
5 | 6 | 5 | 6 | 5 | 6 | 5 | 6 |
7 | 7 | 7 | 7 | 7 | 7 | 7 | 7 |
In de bovenstaande tabel kunt u de pixels bepalen die worden gedecodeerd met elke pass van de decoder. In tegenstelling tot de WINDOWS 7 GIF-codec repliceert de PNG-codec van Windows 7 de meest beschikbare pixel op een scanlijn om lege pixels te vullen.
In de volgende afbeeldingen ziet u een voorbeeld van de windows 7 PNG progressive decoding codec op drie progressieve niveaus.
In de afbeelding linksboven ziet u een PNG-afbeelding die is gedecodeerd op progressief niveau 0. In de afbeelding rechtsboven ziet u dezelfde PNG-afbeelding die is gedecodeerd op progressief niveau 3. In de onderste afbeelding ziet u dezelfde afbeelding die volledig is gedecodeerd na 7 progressieve niveaus.
GIF Progressive Decoding
GIF-afbeeldingsbestanden bieden vier progressieve niveaus voor decodering, zoals beschreven in de GIF-specificatie. Elke pas vult bepaalde rijen in een afbeelding, waardoor na de vierde pas een volledige afbeelding wordt geproduceerd. In de volgende tabel uit de GIF-specificatie ziet u welke scanlijnen door elke pass van de decoder worden gedecodeerd.
Niveaunummer/wachtwoordnummer | Scanlijnen gevuld | Scanlijn starten |
---|---|---|
1 | Elke achtste scanlijn | 0 |
2 | Elke achtste scanlijn | 4 |
3 | Elke vierde scanregel | 2 |
4 | Elke seconde scanregel | 1 |
Hoewel codecs de inhoud van lege pixels op een bepaald niveau kunnen opgeven, worden met de Windows GIF-codec lege scanregels gevuld door gevulde scanregels boven de lege scanlijn te repliceren.
Progressieve decodering in toepassingen
De belangrijkste progressieve decoderingsinterface is de IWICProgressiveLevelControl interface. Als u een verwijzing naar de interface wilt verkrijgen, voert u een query uit op een afbeeldingskader (IWICBitmapFrameDecode) voor IWICProgressiveLevelControl. Progressieve methoden kunnen vervolgens worden geopend vanuit de interface.
De onderstaande code bevat een voorbeeld voor het gebruik van progressieve decodering in toepassingen.
IWICProgressiveLevelControl *pProgressive = NULL;
HRESULT hr = (pBitmapFrame->QueryInterface(
IID_IWICProgressiveLevelControl,
(void**) &pProgressive));
if (SUCCEEDED(hr))
{
for (UINT uCurrentLevel = 0; SUCCEEDED(hr); uCurrentLevel++)
{
hr = pProgressive->SetCurrentLevel(uCurrentLevel);
if (WINCODEC_ERR_INVALIDPROGRESSIVELEVEL == hr)
{
// No more levels
break;
}
if (SUCCEEDED(hr))
{
// Output the current level
hr = pBitmapFrame->CopyPixels(...);
}
}
}
if (pProgressive)
{
pProgressive->Release();
}
De voorgaande code biedt de basisfunctionaliteit die nodig is voor het implementeren van progressieve decodering in de meeste toepassingen. Met behulp van de code kunnen progressieve niveaus worden geopend zodra pixelgegevens van afbeeldingen beschikbaar komen. De functie SetCurrentLevel blokkeert de uitvoering totdat het aangevraagde niveau beschikbaar is.
Aangepaste codec-ondersteuning voor progressieve decodering
Codecontwikkelaars kunnen ervoor kiezen om de IWICProgressiveLevelControl te implementeren als hun afbeeldingsindelingen progressieve decodering ondersteunen. Ondersteuning voor progressieve decodering is geen vereiste voor detectie en arbitrage door WIC. Progressieve decodering verbetert echter de gebruikerservaring aanzienlijk en de implementatie moet indien mogelijk worden overwogen.
Verwante onderwerpen
-
conceptuele
-
Overzicht van Windows Imaging-onderdelen
-
Andere Middelen
-
Digitale compressie en codering van Continuous-Tone Still-afbeeldingen - Vereisten en richtlijnen