| 
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++)
			{
				// Read a frame
				using (var frame = ((GifReader)imageReader).Frames[i])
				using (var bitmap = frame.GetBitmap())
				{
					Console.WriteLine(i);
					// Preserve the original palette
					var palette = bitmap.Palette;
					// Preserve the original pixel format
					var pixelFormat = bitmap.PixelFormat;
					// Convert the bitmap to a non-indexed format
					bitmap.ColorManagement.Convert(ColorSpace.Rgb, true, false);
					// Resize the bitmap in a high quality mode
					bitmap.Transforms.Resize(width, height, ResizeInterpolationMode.High);
					// Return to the indexed format
					bitmap.Palette = palette;
					bitmap.ColorManagement.Convert(pixelFormat);
					// Copy frame delay
					imageWriter.FrameOptions.Delay = frame.Delay;
					// Add the frame
					Pipeline.Run(bitmap + imageWriter);
				}
			}
		}
		return exportedImageStream.GetBuffer();
	}
}
 Kind regards Edited by user Monday, January 25, 2016 3:05:38 AM(UTC)
 | Reason: Not specified | 
	
    | 
             | 
            
         | 
    |  | 
        
        
        
         
		   
        
            
            
	
    | 
Rank: Advanced Member
 Groups: Guest
Joined: 7/28/2003(UTC)
 Posts: 1,660
 
 Thanks: 5 timesWas 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++)
			{
				// Read a frame
				using (var frame = ((GifReader)imageReader).Frames[i])
				using (var bitmap = frame.GetBitmap())
				{
					Console.WriteLine(i);
					bitmap.Save("../../../" + i + ".png");
					// Preserve the original palette
					var palette = bitmap.Palette;
					// Preserve the original pixel format
					var pixelFormat = bitmap.PixelFormat;
					// Convert the bitmap to a non-indexed format
					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));
					//Use low quality resize mode to prevent noise
					bitmap.Transforms.Resize(newWidth, newHeight, ResizeInterpolationMode.Low);
					// Return to the indexed format
					bitmap.ColorManagement.Palette = palette;
					bitmap.ColorManagement.Convert(pixelFormat);
					// Copy frame delay
					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;
					// Add the frame
					Pipeline.Run(bitmap + imageWriter);
				}
			}
		}
		return exportedImageStream.GetBuffer();
	}
}
 Edited by user Tuesday, January 26, 2016 8:34:32 AM(UTC)
 | 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.