Kopieren einzelner Frames aus einem Mehrrahmenbild
Im folgenden Beispiel werden die einzelnen Frames aus einer TIFF-Datei mit mehreren Frames abgerufen. Beim Erstellen der TIFF-Datei wurden die einzelnen Frames der Seitendimension hinzugefügt (siehe Erstellen und Speichern eines Multiple-Frame Bilds). Der Code zeigt jede der vier Seiten an und speichert jede Seite in einer separaten PNG-Datenträgerdatei.
Der Code erstellt ein Image--Objekt aus der TIFF-Datei mit mehreren Frames. Um die einzelnen Frames (Seiten) abzurufen, ruft der Code die Image::SelectActiveFrame Methode dieses Image--Objekts auf. Das erste Argument, das an die Image::SelectActiveFrame Methode übergeben wird, ist die Adresse einer GUID, die die Dimension angibt, in der die Frames zuvor der TIFF-Datei mit mehreren Frames hinzugefügt wurden. Die GUID FrameDimensionPage wird in Gdiplusimaging.h definiert. Andere in dieser Headerdatei definierte GUIDs sind FrameDimensionTime und FrameDimensionResolution. Das zweite Argument, das an die Image::SelectActiveFrame Methode übergeben wird, ist der nullbasierte Index der gewünschten Seite.
Der Code basiert auf der Hilfsfunktion GetEncoderClsid, die in Abrufen des Klassenbezeichners für einen Encoder-angezeigt wird.
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);
Die folgende Abbildung zeigt die einzelnen Seiten wie im vorherigen Code dargestellt.