diff --git a/graphics/x11drv/dib.c b/graphics/x11drv/dib.c index 943247d71f5d335ea36e4bd842777456b31ba3c4..e6281b3972c004b57c61177c260dfff9964622a0 100644 --- a/graphics/x11drv/dib.c +++ b/graphics/x11drv/dib.c @@ -2701,9 +2701,9 @@ int X11DRV_DIB_GetImageBits( const X11DRV_DIB_IMAGEBITS_DESCR *descr ) return lines; } } - XGetSubImage( display, descr->drawable, descr->xDest, descr->yDest, - descr->width, descr->height, AllPlanes, ZPixmap, - bmpImage, descr->xSrc, descr->ySrc ); + XGetSubImage( display, descr->drawable, descr->xSrc, descr->ySrc, + descr->width, lines, AllPlanes, ZPixmap, + bmpImage, descr->xDest, descr->yDest ); /* Transfer the pixels */ switch(descr->infoBpp) @@ -3013,13 +3013,21 @@ INT X11DRV_DIB_GetDIBits( descr.depth = bmp->bitmap.bmBitsPixel; descr.drawable = (Pixmap)bmp->physBitmap; descr.gc = BITMAP_GC(bmp); - descr.xSrc = 0; - descr.ySrc = startscan; - descr.xDest = 0; - descr.yDest = 0; descr.width = bmp->bitmap.bmWidth; descr.height = bmp->bitmap.bmHeight; descr.colorMap = info->bmiColors; + descr.xDest = 0; + descr.yDest = 0; + descr.xSrc = 0; + + if (descr.lines > 0) + { + descr.ySrc = descr.height - startscan - 1; + } + else + { + descr.ySrc = startscan; + } if (dib) descr.useShm = (dib->shminfo.shmid != -1);