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



Reply via email to