Afzonderlijke frames kopiëren vanuit een afbeelding met meerdere frames
In het volgende voorbeeld worden de afzonderlijke frames opgehaald uit een TIFF-bestand met meerdere frames. Toen het TIFF-bestand werd gemaakt, zijn de afzonderlijke frames toegevoegd aan de paginadimensie (zie Een Multiple-Frame Afbeelding maken en opslaan). De code geeft elk van de vier pagina's weer en slaat elke pagina op in een afzonderlijk PNG-schijfbestand.
De code bouwt een Image-object uit het TIFF-bestand met meerdere frames. Als u de afzonderlijke frames (pagina's) wilt ophalen, roept de code de Afbeelding aan::SelectActiveFrame methode van dat Image-object. Het eerste argument dat is doorgegeven aan de Image::SelectActiveFrame methode is het adres van een GUID die de dimensie aangeeft waarin de frames eerder zijn toegevoegd aan het TIFF-bestand met meerdere frames. De GUID FrameDimensionPage is gedefinieerd in Gdiplusimaging.h. Andere GUID's die in dat headerbestand zijn gedefinieerd, zijn FrameDimensionTime en FrameDimensionResolution. Het tweede argument dat wordt doorgegeven aan de Image::SelectActiveFrame methode is de op nul gebaseerde index van de gewenste pagina.
De code is afhankelijk van de helperfunctie GetEncoderClsid, die wordt weergegeven in De klasse-id voor een encoder ophalen.
GUID pageGuid = FrameDimensionPage;
CLSID encoderClsid;
Image multi(L"Multiframe.tif");
// Get the CLSID of the PNG encoder.
GetEncoderClsid(L"image/png", &encoderClsid);
// Display and save the first page (index 0).
multi.SelectActiveFrame(&pageGuid, 0);
graphics.DrawImage(&multi, 10, 10);
multi.Save(L"Page0.png", &encoderClsid, NULL);
// Display and save the second page.
multi.SelectActiveFrame(&pageGuid, 1);
graphics.DrawImage(&multi, 200, 10);
multi.Save(L"Page1.png", &encoderClsid, NULL);
// Display and save the third page.
multi.SelectActiveFrame(&pageGuid, 2);
graphics.DrawImage(&multi, 10, 150);
multi.Save(L"Page2.png", &encoderClsid, NULL);
// Display and save the fourth page.
multi.SelectActiveFrame(&pageGuid, 3);
graphics.DrawImage(&multi, 200, 150);
multi.Save(L"Page3.png", &encoderClsid, NULL);
In de volgende afbeelding ziet u de afzonderlijke pagina's zoals weergegeven door de voorgaande code.