Próbuję połączyć dwa różne pliki GIF w jeden plik.W języku C#, być może jest to błąd dla Image.SaveAdd, kto może mi pomóc go rozwiązać?
Po pierwsze, nauczyłem się dużo o formacie gif. I wiem, że wartość opóźnienia jest ustawiana w rozszerzeniu graficznym, które jest blokiem pliku gif.
Uratowałem pierwszy gif i ustawić wartość FrameDelay, kod jak poniżej:
ImageCodecInfo codeInfo = GetEncoder(ImageFormat.Gif);
System.Drawing.Imaging.Encoder saveEncoder = System.Drawing.Imaging.Encoder.SaveFlag;
EncoderParameters parameters = new EncoderParameters(1);
parameters.Param[0] = new EncoderParameter(saveEncoder, (long)EncoderValue.MultiFrame);
PropertyItem PropertyTagFrameDelay = img1.GetPropertyItem(0x5100);
PropertyTagFrameDelay.Value = new byte[] { 0x96, 0x00 };// this is the delay value 0x0096, means 1.5 second
img1.SetPropertyItem(PropertyTagFrameDelay);
PropertyItem LoopCount = img1.GetPropertyItem(0x5101);
LoopCount.Value = new byte[] { 0x00, 0x00 };// this means the gif loops endlessly
img1.SetPropertyItem(LoopCount);
img1.Save(@"c:\ddd.gif", codeInfo, parameters);
Potem próbowałem dodać kolejny obraz jako drugiej ramce.
parameters = new EncoderParameters(1);
parameters.Param[0] = new EncoderParameter(saveEncoder, (long)EncoderValue.FrameDimensionTime);
PropertyTagFrameDelay = img2.GetPropertyItem(0x5100);
PropertyTagFrameDelay.Value = new byte[] { 0x96, 0x00 };// this is the delay value 0x0096, means 1.5 second
img2.SetPropertyItem(PropertyTagFrameDelay);
Wreszcie, powinienem zakończyć to zdjęcie.
parameters = new EncoderParameters(1);
parameters.Param[0] = new EncoderParameter(saveEncoder, (long)EncoderValue.Flush);
img1.SaveAdd(parameters);
I stwierdziliśmy, że czas opóźnienia drugiej ramki jest zawsze 0.
Próbowałam wiele metod, ale nie mam pojęcia, aby to samo 0x96.
Co jest nie tak z tym?
Po prostu nie jest obsługiwany przez koder GIF wbudowany w GDI +. Nie możesz tego zrobić. –
naprawdę? Czy to prawda?? –
OK, głupie pytanie, ale dla pewności: Mówisz o animowanych GIF-ach, prawda? – RenniePet