Dela via


Översikt över progressiv avkodning

Det här avsnittet beskriver progressiv avkodning och hur du använder progressiv avkodning i program. Den innehåller också riktlinjer för att skapa codecs som stöder progressiv avkodning.

Det här avsnittet innehåller följande avsnitt.

Introduktion

Progressiv avkodning ger möjlighet att stegvis avkoda och återge delar av en bild innan hela avbildningen har laddats ned. Den här funktionen förbättrar avsevärt användarens upplevelse när du visar bilder från Internet, eftersom användaren inte behöver vänta tills hela bilden laddas ned innan avkodningen kan börja. Användarna kan se en förhandsgranskning av bilden med tillgängliga data långt innan hela avbildningen laddas ned. Den här funktionen är viktig för alla program som används för att visa bilder från Internet eller från datakällor med begränsad bandbredd.

Windows Imaging Component (WIC) i Windows 7 stöder progressiv avkodning av populära bildformat som JPEG, PNG och GIF. WIC stöder även alla WIC-aktiverade icke-Microsoft-codecs som implementerar progressiv avkodning. Progressiv kodning stöds inte i den aktuella versionen av WIC. Det här avsnittet beskriver progressiv avkodning i Windows 7 och proceduren för aktivering av progressiv avkodning i dina program.

Vad är progressiv avkodning?

Progressiv avkodning är möjligheten att stegvis avkoda delar av en bild från en ofullständig bildfil. Traditionell avkodning kräver en fullständig bildfil innan avkodningen kan börja. Progressiv avkodning startar efter att en progressiv nivå av en bild har laddats ned. Avkodaren utför ett avkodningspass på bildens aktuella progressiva nivå. Den utför sedan flera avkodningspass på bilden när varje progressiv nivå laddas ned. Varje avkodningspass visar mer av bilden tills avbildningen laddas ned helt och avkodas. Antalet pass som krävs för att avkoda en fullständig bild beror på bildfilformatet och kodningsprocessen som används för att skapa avbildningen.

Bilder måste vara specifikt kodade för att implementera progressiv avkodning, men inte alla bildformat stöder det. I följande lista sammanfattas kraven för att använda progressiv avkodning.

  • Bildfilen måste ha stöd för progressiv avkodning. De flesta bildformat stöder inte progressiv avkodning, även om de populära bildformaten JPEG, PNG och GIF gör det.
  • Bildfilen måste kodas som en progressiv bild. Bildfiler som inte har skapats med den progressiva avbildningskodningen kan inte implementera progressiv avkodning, även om filformatet annars skulle stödja det.
  • En codec som stöder progressiv avkodning måste vara tillgänglig. Om en codec inte stöder progressiv avkodning avkodas en bild som kodas som en progressiv bild som en traditionell bild.

Stöd för progressiv avkodning i Windows 7

Windows 7 innehåller inbyggda codecs som stöder progressiv avkodning för JPEG-, PNG- och GIF-bildformat. Var och en av dessa Windows 7-codecs utför flera avkodningspass på en bild. Varje pass motsvarar en viss nivå och del av bilden som avkodas, vilket så småningom leder till en helt avkodad bild.

Varje bildformat hanterar progressiv avkodning på olika sätt. Följande tabell innehåller information om antalet progressiva nivåer och avkodningsmetoden som stöds av de progressiva avkodningsformaten i Windows 7.

Bildformat Antal progressiva nivåer som stöds Progressiv avkodningsmetod
JPEG Definierad av bild Öka upplösningen
PNG 7 Sammanflätning
GIF 4 Sammanflätning

 

Dessutom kan progressiv avkodning implementeras i codecs genom att ge stöd för progressiva gränssnitt och metoder. Om progressiv avkodning inte stöds i en codec, bör lämpliga felmeddelanden returneras om dessa metoder anropas.

Progressiv JPEG-avkodning

Progressiv JPEG-avkodning visar bilddata med allt högre upplösningar för varje nivå tills fullupplösningsbilden är tillgänglig. Varje nivå av bilden är inställd på att ge en annan upplösningsnivå. När mer progressiva nivåer blir tillgängliga visas bilden med högre upplösningar tills den fullständiga upplösningsbilden har lösts.

Antalet tillgängliga nivåer och upplösningen som anges på varje nivå beror helt på den kodade JPEG-koden. Följande två bilder visar ett exempel på progressiv JPEG-avkodning på två progressiva nivåer.

exempel på progressiv jpeg-avkodning

Bilden till vänster avkodas på progressiv nivå 0. Bilden till höger är helt avkodad efter fem progressiva nivåer.

PNG/GIF Progressiv avkodning

Både PNG- och GIF-progressiv avkodning använder en sammanflätad progressiv avkodningsmetod. Avkodningsprocessen för båda formaten är mycket lik.

PNG progressiv avkodning

PNG-bildfiler ger sju progressiva nivåer för avkodning, enligt beskrivningen i PNG-specifikationen. Progressiv PNG-avkodning implementeras genom avkodning av ett angivet bildpunktsmönster vid varje avkodningspass. Mönstret i följande tabell från PNG-specifikationen replikeras över hela bilden. Varje tal representerar den progressiva nivå där motsvarande pixel avkodas.

               
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

 

I tabellen ovan kan du bestämma vilka bildpunkter som ska avkodas med varje pass av avkodaren. Till skillnad från Windows 7 GIF-codec replikerar Windows 7 PNG-codec den mest tillgängliga pixeln på en genomsökningsrad för att fylla i tomma pixlar.

Följande bilder visar ett exempel på den progressiva avkodningskodningen för Windows 7 PNG på tre progressiva nivåer.

exempel på png progressiv avkodning

Bilden längst upp till vänster visar en PNG-avkodad bild på progressiv nivå 0. Den övre högra bilden visar samma PNG-bild som avkodas på progressiv nivå 3. Den nedre bilden visar samma bild helt avkodad efter 7 progressiva nivåer.

GIF progressiv avkodning

GIF-bildfiler ger fyra progressiva nivåer för avkodning, enligt beskrivningen i GIF-specifikationen. Varje pass fyller vissa rader i en bild och skapar en fullständig bild efter det fjärde passet. Följande tabell från GIF-specifikationen visar vilka genomsökningsrader som avkodas av varje pass av avkodaren.

Nivånummer/passnummer Skanna ifyllda rader Startar skanning
1 Var åttonde skanningslinje 0
2 Var åttonde skanningslinje 4
3 Varje fjärde genomsökningsrad 2
4 Varannan genomsökningsrad 1

 

Även om codecs kan ange innehållet i tomma bildpunkter på en viss nivå, fyller Windows GIF-codec tomma genomsökningsrader genom att replikera ifyllda genomsökningsrader ovanför den tomma genomsökningsraden.

Progressiv avkodning i program

Det huvudsakliga progressiva avkodningsgränssnittet är gränssnittet IWICProgressiveLevelControl. Hämta en referens till gränssnittet genom att anropa en bildram (IWICBitmapFrameDecode) för IWICProgressiveLevelControl. Progressiva metoder kan sedan nås från gränssnittet.

Koden nedan är ett exempel på hur du använder progressiv avkodning i program.

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();
}

Föregående kod innehåller de grundläggande funktioner som krävs för att implementera progressiv avkodning i de flesta program. Med hjälp av koden kan progressiva nivåer nås när bildpunktsdata blir tillgängliga. Funktionen SetCurrentLevel blockerar exekveringen tills den begärda nivån är tillgänglig.

Anpassat Codec-stöd för progressiv avkodning

Codec-utvecklare kan välja att implementera IWICProgressiveLevelControl- om deras bildformat stöder progressiv avkodning. Stöd för progressiv avkodning är inte ett krav för upptäck och beslut av WIC. Progressiv avkodning förbättrar dock användarupplevelsen avsevärt, och implementeringen bör övervägas om möjligt.

konceptuell

Översikt över Windows Imaging-komponenten

andra resurser

digital komprimering och kodning av Continuous-Tone stillbilder – krav och riktlinjer

JPEG-filutbytesformat

GIF89a Specifikation

Specifikation och tillägg för Portable Network Graphics (PNG)