diff --git a/graphics/x11drv/bitblt.c b/graphics/x11drv/bitblt.c
index e99081c4151974517ad451be7c7271b785ccaadc..f89d6f90f5333e6997613bebd0da1cebc921d3db 100644
--- a/graphics/x11drv/bitblt.c
+++ b/graphics/x11drv/bitblt.c
@@ -1504,7 +1504,9 @@ BOOL X11DRV_BitBlt( DC *dcDst, INT xDst, INT yDst,
     sDst = X11DRV_LockDIBSection( dcDst, DIB_Status_None, FALSE );
     sSrc = X11DRV_LockDIBSection( dcSrc, DIB_Status_None, FALSE );
 
-    if ((sSrc == DIB_Status_AppMod) && (rop == SRCCOPY)) {
+    if ((sSrc == DIB_Status_AppMod) && (rop == SRCCOPY) &&
+        (dcSrc->bitsPerPixel == dcDst->bitsPerPixel))
+    {
       /* do everything ourselves; map coordinates */
       xSrc = dcSrc->DCOrgX + XLPTODP( dcSrc, xSrc );
       ySrc = dcSrc->DCOrgY + YLPTODP( dcSrc, ySrc );