Nicer interlaced GIF handling
This commit is contained in:
		
							parent
							
								
									a9a16f88e9
								
							
						
					
					
						commit
						fbec9db3f6
					
				|  | @ -278,45 +278,28 @@ public class GifDecoder | ||||||
|                 return bytes; |                 return bytes; | ||||||
|             } |             } | ||||||
| 
 | 
 | ||||||
|             var pass1Count = (int)Math.Ceiling(Height / 8.0f); |             var pass = 0; | ||||||
|             var pass2Count = (int)Math.Ceiling((Height - 4) / 8.0f); |             var inc = 8; | ||||||
|             var pass3Count = (int)Math.Ceiling((Height - 2) / 4.0f); |             var y = 0; | ||||||
|             var pass4Count = (int)Math.Ceiling((Height - 1) / 2.0f); |  | ||||||
| 
 |  | ||||||
|             var indicesOffset = 0; |             var indicesOffset = 0; | ||||||
|             var bytesPerRow = Width * 4; |             var bytesPerRow = Width * 4; | ||||||
|             for (var i = 0; i < pass1Count; i++) |             for (var i = 0; i < Height; i++) | ||||||
|             { |             { | ||||||
|                 bytesIdx = 8 * i * bytesPerRow; |                 bytesIdx = y * bytesPerRow; | ||||||
|                 for (var x = 0; x < Width; x++) |                 for (var x = 0; x < Width; x++) | ||||||
|                 { |                 { | ||||||
|                     WritePixelBytes(bytesIdx + x * 4, _pixelIndices[indicesOffset++]); |                     WritePixelBytes(bytesIdx + x * 4, _pixelIndices[indicesOffset++]); | ||||||
|                 } |                 } | ||||||
|             } | 
 | ||||||
|             for (var i = 0; i < pass2Count; i++) |                 y += inc; | ||||||
|             { |                 if (y >= Height) | ||||||
|                 bytesIdx = (4 + 8 * i) * bytesPerRow; |  | ||||||
|                 for (var x = 0; x < Width; x++) |  | ||||||
|                 { |                 { | ||||||
|                     WritePixelBytes(bytesIdx + x * 4, _pixelIndices[indicesOffset++]); |                     pass += 1; | ||||||
|                 } |                     y = (int)(8 / Math.Pow(2, pass)); | ||||||
|             } |                     inc = y * 2; | ||||||
|             for (var i = 0; i < pass3Count; i++) |  | ||||||
|             { |  | ||||||
|                 bytesIdx = (2 + 4 * i) * bytesPerRow; |  | ||||||
|                 for (var x = 0; x < Width; x++) |  | ||||||
|                 { |  | ||||||
|                     WritePixelBytes(bytesIdx + x * 4, _pixelIndices[indicesOffset++]); |  | ||||||
|                 } |  | ||||||
|             } |  | ||||||
|             for (var i = 0; i < pass4Count; i++) |  | ||||||
|             { |  | ||||||
|                 bytesIdx = (1 + 2 * i) * bytesPerRow; |  | ||||||
|                 for (var x = 0; x < Width; x++) |  | ||||||
|                 { |  | ||||||
|                     WritePixelBytes(bytesIdx + x * 4, _pixelIndices[indicesOffset++]); |  | ||||||
|                 } |                 } | ||||||
|             } |             } | ||||||
|  | 
 | ||||||
|             return bytes; |             return bytes; | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue