Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Med vissa filformat kan du spara flera bilder (ramar) i en enda fil. Du kan till exempel spara flera sidor i en enda TIFF-fil. Om du vill spara den första sidan anropar du metoden Spara i klassen Image. Om du vill spara efterföljande sidor anropar du metoden SaveAdd i klassen Image.
Not
Du kan inte använda SaveAdd för att lägga till ramar i en animerad gif-fil.
Följande konsolprogram skapar en TIFF-fil med fyra sidor. Bilderna som blir sidorna i TIFF-filen kommer från fyra diskfiler: Shapes.bmp, Cereal.gif, Iron.jpgoch House.png. Koden konstruerar först fyra Image-objekt: flera, page2, page3och page4. Först innehåller flera bara bilden från Shapes.bmp, men så småningom innehåller den alla fyra bilderna. Eftersom de enskilda sidorna läggs till i objektet Image läggs de också till i diskfilen Multiframe.tif.
Observera att koden anropar Spara (inte SparaLägg till) för att spara den första sidan. Det första argumentet som skickas till metoden Spara är namnet på diskfilen som så småningom kommer att innehålla flera bildrutor. Det andra argumentet som skickas till metoden Spara anger kodaren som ska användas för att konvertera data i fleraImage-objekt till det format (i det här fallet TIFF) som krävs av diskfilen. Den samma kodaren används automatiskt av alla efterföljande anrop till SaveAdd-metoden i Image-objektet.
Det tredje argumentet som skickas till metoden Spara är adressen till ett EncoderParameters-objekt. EncoderParameters-objektet har en matris som innehåller en enda EncoderParameter-objekt. Guid- del av EncoderParameter-objektet är inställt på EncoderSaveFlag. Value medlem i EncoderParameter-objektet pekar på en ULONG- som innehåller värdet EncoderValueMultiFrame.
Koden sparar den andra, tredje och fjärde sidan genom att anropa metoden SaveAdd för objektet multiImage. Det första argumentet som skickas till metoden SaveAdd är adressen till ett Image-objekt. Bilden i objektet Image läggs till i objektet Image och läggs även till i diskfilen Multiframe.tif. Det andra argumentet som skickas till metoden SaveAdd är adressen till samma EncoderParameters objekt som användes av metoden Spara. Skillnaden är att ULONG- som Value-medlemmen pekar på nu innehåller värdet EncoderValueFrameDimensionPage.
Huvudfunktionen förlitar sig på hjälpfunktionen GetEncoderClsid, som visas i Hämta klassidentifieraren för en kodare.
#include <windows.h>
#include <gdiplus.h>
#include <stdio.h>
using namespace Gdiplus;
INT GetEncoderClsid(const WCHAR* format, CLSID* pClsid); // helper function
INT main()
{
// Initialize GDI+.
GdiplusStartupInput gdiplusStartupInput;
ULONG_PTR gdiplusToken;
GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL);
EncoderParameters encoderParameters;
ULONG parameterValue;
Status stat;
// An EncoderParameters object has an array of
// EncoderParameter objects. In this case, there is only
// one EncoderParameter object in the array.
encoderParameters.Count = 1;
// Initialize the one EncoderParameter object.
encoderParameters.Parameter[0].Guid = EncoderSaveFlag;
encoderParameters.Parameter[0].Type = EncoderParameterValueTypeLong;
encoderParameters.Parameter[0].NumberOfValues = 1;
encoderParameters.Parameter[0].Value = ¶meterValue;
// Get the CLSID of the TIFF encoder.
CLSID encoderClsid;
GetEncoderClsid(L"image/tiff", &encoderClsid);
// Create four image objects.
Image* multi = new Image(L"Shapes.bmp");
Image* page2 = new Image(L"Cereal.gif");
Image* page3 = new Image(L"Iron.jpg");
Image* page4 = new Image(L"House.png");
// Save the first page (frame).
parameterValue = EncoderValueMultiFrame;
stat = multi->Save(L"MultiFrame.tif", &encoderClsid, &encoderParameters);
if(stat == Ok)
printf("Page 1 saved successfully.\n");
// Save the second page (frame).
parameterValue = EncoderValueFrameDimensionPage;
stat = multi->SaveAdd(page2, &encoderParameters);
if(stat == Ok)
printf("Page 2 saved successfully.\n");
// Save the third page (frame).
parameterValue = EncoderValueFrameDimensionPage;
stat = multi->SaveAdd(page3, &encoderParameters);
if(stat == Ok)
printf("Page 3 saved successfully.\n");
// Save the fourth page (frame).
parameterValue = EncoderValueFrameDimensionPage;
stat = multi->SaveAdd(page4, &encoderParameters);
if(stat == Ok)
printf("Page 4 saved successfully.\n");
// Close the multiframe file.
parameterValue = EncoderValueFlush;
stat = multi->SaveAdd(&encoderParameters);
if(stat == Ok)
printf("File closed successfully.\n");
delete multi;
delete page2;
delete page3;
delete page4;
GdiplusShutdown(gdiplusToken);
return 0;
}