--- a/dlls/gdiplus/graphics.c	2018-04-13 22:52:23.000000000 +0200
+++ b/dlls/gdiplus/graphics.c	2018-04-25 16:53:45.815781639 +0200
@@ -4910,6 +4912,21 @@ GpStatus WINGDIPAPI GdipGetWorldTransfor
     return Ok;
 }
 
+GpStatus BITMAP_GraphicsClear(GpBitmap* bitmap, GpRectF* bounds, ARGB color)
+{
+    INT x, y;
+
+    for (y=max(gdip_round(bounds->Y),0); y<min(gdip_round(bounds->Height),bitmap->height); y++)
+    {
+        for (x=max(gdip_round(bounds->X),0); x<min(gdip_round(bounds->Width),bitmap->width); x++)
+        {
+            GdipBitmapSetPixel(bitmap, x, y, color & 0xff000000 ? color : 0xff000000);
+        }
+    }
+
+    return Ok;
+}
+
 GpStatus WINGDIPAPI GdipGraphicsClear(GpGraphics *graphics, ARGB color)
 {
     GpSolidFill *brush;
@@ -4927,13 +4944,14 @@ GpStatus WINGDIPAPI GdipGraphicsClear(Gp
     if (graphics->image && graphics->image->type == ImageTypeMetafile)
         return METAFILE_GraphicsClear((GpMetafile*)graphics->image, color);
 
-    if((stat = GdipCreateSolidFill(color, &brush)) != Ok)
+    if((stat = GdipGetVisibleClipBounds(graphics, &wnd_rect)) != Ok)
         return stat;
 
-    if((stat = GdipGetVisibleClipBounds(graphics, &wnd_rect)) != Ok){
-        GdipDeleteBrush((GpBrush*)brush);
+    if (graphics->image && graphics->image->type == ImageTypeBitmap)
+        return BITMAP_GraphicsClear((GpBitmap*)graphics->image, &wnd_rect, color);
+
+    if((stat = GdipCreateSolidFill(color, &brush)) != Ok)
         return stat;
-    }
 
     GdipFillRectangle(graphics, (GpBrush*)brush, wnd_rect.X, wnd_rect.Y,
                                                  wnd_rect.Width, wnd_rect.Height);
