diff --git a/FosterSamples.sln b/FosterSamples.sln
index 42c9a3b..c774844 100644
--- a/FosterSamples.sln
+++ b/FosterSamples.sln
@@ -11,6 +11,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Froggymark", "Froggymark\Fr
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FosterImGui", "ImGui\FosterImGui.csproj", "{ED95B28D-2822-4F3D-B1C5-591658BB2380}"
EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ImageScaling", "ImageScaling\ImageScaling.csproj", "{D657285F-BF95-4A8E-9637-4FEA829FB008}"
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -36,5 +38,9 @@ Global
{AA3B2D39-7BF3-4CCD-8F19-672474E71D41}.Debug|Any CPU.Build.0 = Debug|Any CPU
{AA3B2D39-7BF3-4CCD-8F19-672474E71D41}.Release|Any CPU.ActiveCfg = Release|Any CPU
{AA3B2D39-7BF3-4CCD-8F19-672474E71D41}.Release|Any CPU.Build.0 = Release|Any CPU
+ {D657285F-BF95-4A8E-9637-4FEA829FB008}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {D657285F-BF95-4A8E-9637-4FEA829FB008}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {D657285F-BF95-4A8E-9637-4FEA829FB008}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {D657285F-BF95-4A8E-9637-4FEA829FB008}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
EndGlobal
diff --git a/ImageScaling/Assets/FosterLogo.png b/ImageScaling/Assets/FosterLogo.png
new file mode 100644
index 0000000..f74587d
Binary files /dev/null and b/ImageScaling/Assets/FosterLogo.png differ
diff --git a/ImageScaling/ImageScaling.csproj b/ImageScaling/ImageScaling.csproj
new file mode 100644
index 0000000..5d67000
--- /dev/null
+++ b/ImageScaling/ImageScaling.csproj
@@ -0,0 +1,19 @@
+
+
+
+ Exe
+ net8.0
+ enable
+
+
+
+
+
+
+
+
+ PreserveNewest
+
+
+
+
diff --git a/ImageScaling/Program.cs b/ImageScaling/Program.cs
new file mode 100644
index 0000000..436be2e
--- /dev/null
+++ b/ImageScaling/Program.cs
@@ -0,0 +1,23 @@
+using System.Numerics;
+using Foster.Framework;
+
+App.Register();
+App.Run("Image Scaling", 960, 540);
+
+class Game : Module
+{
+ readonly Texture Logo = new(new Image(Path.Join("Assets", "FosterLogo.png")));
+ readonly Batcher Batcher = new();
+
+ static RectInt Viewport => new(0, 0, App.WidthInPixels, App.HeightInPixels);
+ static int Scale => Calc.Min(App.WidthInPixels / App.Width, App.HeightInPixels / App.Height);
+
+ public override void Render()
+ {
+ Graphics.Clear(0xdeb813);
+
+ Batcher.Clear();
+ Batcher.Image(Logo, Viewport.Center, Logo.Size / 2, Vector2.One * Scale, 0, Color.White);
+ Batcher.Render();
+ }
+}
diff --git a/ImageScaling/README.md b/ImageScaling/README.md
new file mode 100644
index 0000000..12c42a3
--- /dev/null
+++ b/ImageScaling/README.md
@@ -0,0 +1,4 @@
+# Image Scaling
+
+
+A minimal example of using Foster with simple asset loading and rendering.
diff --git a/ImageScaling/screenshot.png b/ImageScaling/screenshot.png
new file mode 100644
index 0000000..a86449f
Binary files /dev/null and b/ImageScaling/screenshot.png differ
diff --git a/README.md b/README.md
index 0afd0c4..17c11aa 100644
--- a/README.md
+++ b/README.md
@@ -3,6 +3,7 @@ Samples Projects and Demos for the C# [Foster Framework](https://github.com/Fost
| Sample | Description | Preview |
| --- | --- | --- |
+| [Image Scaling](https://github.com/FosterFramework/Samples/tree/main/ImageScaling) | A minimal example of using Foster with simple asset loading and rendering. |
|
| [Shapes](https://github.com/FosterFramework/Samples/tree/main/Shapes) | A small program that draws shapes to the screen without loading any assets |
|
| [Froggymark](https://github.com/FosterFramework/Samples/tree/main/Froggymark) | Performance test that draws as many quads to the screen as it can |
|
| [ImGui](https://github.com/FosterFramework/Samples/tree/main/ImGui) | An example using ImGui.NET wrapped in Foster draw calls |
|