Alexandre Julliard ha scritto:
Massimo Del Fedele max@veneto.com writes:
- descr.bits = bits;
- descr.bits = (BYTE *)bits + widthBytes * (tmpheight > 0 ? (height - startscan - lines) : startscan);
You shouldn't need to change the bits address.
Well, original code was
descr.bits = bits; descr.image = NULL; descr.palentry = NULL; descr.infoWidth = width; descr.lines = tmpheight >= 0 ? lines : -lines; descr.depth = physBitmap->pixmap_depth; descr.drawable = physBitmap->pixmap; descr.gc = BITMAP_GC(physBitmap); descr.xSrc = 0; descr.ySrc = 0; descr.xDest = 0; descr.yDest = height - startscan - lines; <-- HERE descr.width = ds.dsBm.bmWidth; descr.height = lines;
So, wrongly setting DESTINATION bitmap range, instead of SOURCE, which is the correct behaviour for SetDIBits(). I tried this one : descr.xSrc = 0; descr.ySrc = height - startscan - lines; <-- HERE descr.xDest = 0; descr.yDest = 0;
But it didn't work either, so, or I didn't understand how X11DRV_DIB_SetImageBits( &descr ) works, or it has some bug. Looking more in depth inside X11DRV_DIB_SetImageBits(); it shows, for example :
< NO FIXING OF bits BEFORE> case 1: X11DRV_DIB_SetImageBits_1( descr->lines, descr->bits, descr->infoWidth, descr->width, descr->xSrc, (int *)(descr->colorMap), bmpImage, descr->dibpitch );
So, X11DRV_DIB_SetImageBits() and X11DRV_DIB_SetImageBits_XXX() don't set correctly the starting of DIB image when transfering. I could do bits += height - startscan - lines; inside X11DRV_DIB_SetImageBits() instead of X11DRV_SetDIBits(), but somewhere it must be done. Please tell me how you prefere it's done.
Ciao
Max