MCPcopy Create free account
hub / github.com/bluescan/tacentview / SaveMultiFrameTo

Method SaveMultiFrameTo

Src/MultiFrame.cpp:239–321  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

237
238
239void Viewer::SaveMultiFrameTo(const tString& outFile, int outWidth, int outHeight)
240{
241 Config::ProfileData& profile = Config::GetProfileData();
242 tList<tFrame> frames;
243 for (Image* img = Images.First(); img; img = img->Next())
244 {
245 if (!img->IsLoaded())
246 img->Load();
247
248 if (!img->IsLoaded())
249 continue;
250
251 tImage::tPicture* currPic = img->GetCurrentPic();
252 if (!currPic)
253 continue;
254
255 tImage::tPicture resampled(*currPic);
256 if ((resampled.GetWidth() != outWidth) || (resampled.GetHeight() != outHeight))
257 resampled.Resample(outWidth, outHeight, tImage::tResampleFilter(profile.ResampleFilter), tImage::tResampleEdgeMode(profile.ResampleEdgeMode));
258
259 tFrame* frame = new tFrame(resampled.StealPixels(), outWidth, outHeight, currPic->Duration);
260 frames.Append(frame);
261 }
262
263 bool success = false;
264 tFileType fileType = tGetFileTypeFromName( profile.SaveFileTypeMultiFrame );
265 switch (fileType)
266 {
267 case tFileType::GIF:
268 {
269 tImageGIF gif(frames, true);
270 tImageGIF::SaveParams params;
271 params.Format = tPixelFormat(int(tPixelFormat::FirstPalette) + profile.SaveFileGifBPP - 1);
272 params.Method = tQuantize::Method(profile.SaveFileGifQuantMethod);
273 params.Loop = profile.SaveFileGifLoop;
274 params.AlphaThreshold = profile.SaveFileGifAlphaThreshold;
275 params.OverrideFrameDuration = profile.SaveFileGifDurMultiFrame;
276 params.DitherLevel = double(profile.SaveFileGifDitherLevel);
277 params.FilterSize = (profile.SaveFileGifFilterSize * 2) + 1;
278 params.SampleFactor = profile.SaveFileGifSampleFactor;
279 success = gif.Save(outFile, params);
280 break;
281 }
282
283 case tFileType::WEBP:
284 {
285 tImageWEBP webp(frames, true);
286 success = webp.Save(outFile, profile.SaveFileWebpLossy, profile.SaveFileWebpQualComp, profile.SaveFileWebpDurMultiFrame);
287 break;
288 }
289
290 case tFileType::APNG:
291 {
292 tImageAPNG apng(frames, true);
293 tImageAPNG::SaveParams params;
294 params.OverrideFrameDuration = profile.SaveFileApngDurMultiFrame;
295 tImageAPNG::tFormat savedFormat = apng.Save(outFile, params);
296 success = (savedFormat != tImageAPNG::tFormat::Invalid);

Callers

nothing calls this directly

Calls 8

GetCurrentPicMethod · 0.80
GetWidthMethod · 0.80
GetHeightMethod · 0.80
ResampleMethod · 0.80
IsLoadedMethod · 0.45
LoadMethod · 0.45
SaveMethod · 0.45
ClearMethod · 0.45

Tested by

no test coverage detected