Add .GIF image loading using ImageSharp
This commit is contained in:
		
							parent
							
								
									2c9958a64a
								
							
						
					
					
						commit
						66c324be53
					
				|  | @ -8,5 +8,6 @@ | |||
|   </PropertyGroup> | ||||
|   <ItemGroup> | ||||
|     <PackageReference Include="rectpacksharp" Version="1.2.0" /> | ||||
|     <PackageReference Include="SixLabors.ImageSharp" Version="3.1.5" /> | ||||
|   </ItemGroup> | ||||
| </Project> | ||||
|  | @ -0,0 +1,29 @@ | |||
| using Godot; | ||||
| using SixLabors.ImageSharp.PixelFormats; | ||||
| 
 | ||||
| namespace KeepersCompound.TMV; | ||||
| 
 | ||||
| public partial class TextureLoader | ||||
| { | ||||
|     // TODO: Replace this with my own implementation lol | ||||
|     // References: | ||||
|     // - https://www.w3.org/Graphics/GIF/spec-gif89a.txt | ||||
|     private static ImageTexture LoadGif(string path) | ||||
|     { | ||||
|         using var gifImage = SixLabors.ImageSharp.Image.Load<Rgba32>(path); | ||||
| 
 | ||||
|         var width = gifImage.Width; | ||||
|         var height = gifImage.Height; | ||||
|         var image = Image.Create(width, height, false, Image.Format.Rgba8); | ||||
|         for (var y = 0; y < height; y++) | ||||
|         { | ||||
|             for (var x = 0; x < width; x++) | ||||
|             { | ||||
|                 var pixel = gifImage[x, y].ToVector4(); | ||||
|                 image.SetPixel(x, y, new Color(pixel.X, pixel.Y, pixel.Z, pixel.W)); | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
|         return ImageTexture.CreateFromImage(image); | ||||
|     } | ||||
| } | ||||
|  | @ -98,12 +98,13 @@ public partial class TextureLoader | |||
|         return loaded; | ||||
|     } | ||||
| 
 | ||||
|     private static ImageTexture LoadTexture(string path) | ||||
|     public static ImageTexture LoadTexture(string path) | ||||
|     { | ||||
|         var ext = path.GetExtension().ToLower(); | ||||
|         var texture = ext switch | ||||
|         { | ||||
|             "pcx" => LoadPcx(path), | ||||
|             "gif" => LoadGif(path), | ||||
|             _ => ImageTexture.CreateFromImage(Image.LoadFromFile(path)), | ||||
|         }; | ||||
|         return texture; | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue