Alexandre Julliard ha scritto:
Massimo Del Fedele <[email protected]> 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