diff --git a/src/blt.c b/src/blt.c
index d057eda..2805b3e 100644
--- a/src/blt.c
+++ b/src/blt.c
@@ -387,20 +387,34 @@ void blt_colorfill(
 
     if (bpp == 8)
     {
-        for (int i = 0; i < dst_h; i++)
+        if (size == dst_p)
         {
-            memset(dst, color, size);
-            dst += dst_p;
+            memset(dst, color, dst_p * dst_h);
+        }
+        else
+        {
+            for (int i = 0; i < dst_h; i++)
+            {
+                memset(dst, color, size);
+                dst += dst_p;
+            }
         }
     }
     else if (bpp == 16)
     {
         if ((color & 0xFF) == ((color >> 8) & 0xFF))
         {
-            for (int i = 0; i < dst_h; i++)
+            if (size == dst_p)
             {
-                memset(dst, color, size);
-                dst += dst_p;
+                memset(dst, color, dst_p * dst_h);
+            }
+            else
+            {
+                for (int i = 0; i < dst_h; i++)
+                {
+                    memset(dst, color, size);
+                    dst += dst_p;
+                }
             }
         }
         else
@@ -425,10 +439,17 @@ void blt_colorfill(
             (color & 0xFF) == ((color >> 16) & 0xFF) &&
             (color & 0xFF) == ((color >> 24) & 0xFF))
         {
-            for (int i = 0; i < dst_h; i++)
+            if (size == dst_p)
             {
-                memset(dst, color, size);
-                dst += dst_p;
+                memset(dst, color, dst_p * dst_h);
+            }
+            else
+            {
+                for (int i = 0; i < dst_h; i++)
+                {
+                    memset(dst, color, size);
+                    dst += dst_p;
+                }
             }
         }
         else