Rank: Member
Groups: Guest
Joined: 1/12/2016(UTC) Posts: 23
Thanks: 8 times
|
Hello, When I try to resize an animated gif image, the new image loses quality and is deformed (See images attached). Code:public byte[] ResizeGif(byte[] media, int width, int height)
{
using (var imageStream = new MemoryStream(media))
using (var exportedImageStream = new MemoryStream())
using (var imageReader = ImageReader.Create(imageStream))
{
using (var imageWriter = new GifWriter(exportedImageStream))
{
imageWriter.BackgroundIndex = ((GifReader)imageReader).BackgroundEntryIndex;
imageWriter.Palette = ((GifReader)imageReader).Palette;
imageWriter.PlaybackCount = ((GifReader)imageReader).PlaybackCount;
for (var i = 0; i < ((GifReader)imageReader).Frames.Count; i++)
{
using (var frame = ((GifReader)imageReader).Frames[i])
using (var bitmap = frame.GetBitmap())
{
Console.WriteLine(i);
var palette = bitmap.Palette;
var pixelFormat = bitmap.PixelFormat;
bitmap.ColorManagement.Convert(ColorSpace.Rgb, true, false);
bitmap.Transforms.Resize(width, height, ResizeInterpolationMode.High);
bitmap.Palette = palette;
bitmap.ColorManagement.Convert(pixelFormat);
imageWriter.FrameOptions.Delay = frame.Delay;
Pipeline.Run(bitmap + imageWriter);
}
}
}
return exportedImageStream.GetBuffer();
}
}
Kind regards Edited by user 9 years ago
| Reason: Not specified
|
|
|
|
Rank: Advanced Member
Groups: Guest
Joined: 7/28/2003(UTC) Posts: 1,660
Thanks: 5 times Was thanked: 76 time(s) in 74 post(s)
|
Here is the updated code which fixes the problems: Code:public byte[] ResizeGif(byte[] media, int width, int height)
{
using (var imageStream = new MemoryStream(media))
using (var exportedImageStream = new MemoryStream())
using (var imageReader = ImageReader.Create(imageStream))
{
var kX = (float)width / (float)imageReader.Width;
var kY = (float)height / (float)imageReader.Height;
using (var imageWriter = new GifWriter(exportedImageStream))
{
imageWriter.BackgroundIndex = ((GifReader)imageReader).BackgroundEntryIndex;
imageWriter.Palette = ((GifReader)imageReader).Palette;
imageWriter.PlaybackCount = ((GifReader)imageReader).PlaybackCount;
for (var i = 0; i < ((GifReader)imageReader).Frames.Count; i++)
{
using (var frame = ((GifReader)imageReader).Frames[i])
using (var bitmap = frame.GetBitmap())
{
Console.WriteLine(i);
bitmap.Save("../../../" + i + ".png");
var palette = bitmap.Palette;
var pixelFormat = bitmap.PixelFormat;
bitmap.ColorManagement.Convert(ColorSpace.Rgb, true, false);
var newWidth = Math.Max(1, (int)((float)bitmap.Width * kX));
var newHeight = Math.Max(1, (int)((float)bitmap.Height * kY));
bitmap.Transforms.Resize(newWidth, newHeight, ResizeInterpolationMode.Low);
bitmap.ColorManagement.Palette = palette;
bitmap.ColorManagement.Convert(pixelFormat);
imageWriter.FrameOptions.Left = (ushort)((float)frame.Left * kX);
imageWriter.FrameOptions.Top = (ushort)((float)frame.Top * kY);
imageWriter.FrameOptions.Delay = frame.Delay;
imageWriter.FrameOptions.DisposalMethod = frame.DisposalMethod;
Pipeline.Run(bitmap + imageWriter);
}
}
}
return exportedImageStream.GetBuffer();
}
}
Edited by user 9 years ago
| Reason: Not specified |
Best regards, Fedor Skvortsov
|
 1 user thanked Fedor for this useful post.
|
|
|
Rank: Member
Groups: Guest
Joined: 1/12/2016(UTC) Posts: 23
Thanks: 8 times
|
|
|
|
|
Forum Jump
You cannot post new topics in this forum.
You cannot reply to topics in this forum.
You cannot delete your posts in this forum.
You cannot edit your posts in this forum.
You cannot create polls in this forum.
You cannot vote in polls in this forum.