Small DIB fixes.
This commit is contained in:
parent
07c447f971
commit
1bb9860547
|
@ -285,10 +285,9 @@ static void X11DRV_DIB_GetImageBits_1( int lines, BYTE *dstbits,
|
||||||
/* 32 bit aligned */
|
/* 32 bit aligned */
|
||||||
DWORD linebytes = ((dstwidth + 31) & ~31) / 8;
|
DWORD linebytes = ((dstwidth + 31) & ~31) / 8;
|
||||||
|
|
||||||
if (lines < 0 )
|
if (lines < 0 ) {
|
||||||
{
|
|
||||||
lines = -lines;
|
lines = -lines;
|
||||||
dstbits = dstbits + ( linebytes * lines-1 );
|
dstbits = dstbits + linebytes * (lines - 1);
|
||||||
linebytes = -linebytes;
|
linebytes = -linebytes;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1666,7 +1665,7 @@ static void X11DRV_DIB_SetImageBits_24( int lines, const BYTE *srcbits,
|
||||||
if (lines < 0 )
|
if (lines < 0 )
|
||||||
{
|
{
|
||||||
lines = -lines;
|
lines = -lines;
|
||||||
srcbits = srcbits + ( linebytes * lines-1 );
|
srcbits = srcbits + linebytes * (lines - 1);
|
||||||
linebytes = -linebytes;
|
linebytes = -linebytes;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2853,7 +2852,6 @@ INT X11DRV_DIB_GetDIBits(
|
||||||
X11DRV_DIBSECTION *dib = (X11DRV_DIBSECTION *) bmp->dib;
|
X11DRV_DIBSECTION *dib = (X11DRV_DIBSECTION *) bmp->dib;
|
||||||
X11DRV_DIB_IMAGEBITS_DESCR descr;
|
X11DRV_DIB_IMAGEBITS_DESCR descr;
|
||||||
PALETTEOBJ * palette;
|
PALETTEOBJ * palette;
|
||||||
BYTE *bbits = (BYTE*)bits;
|
|
||||||
|
|
||||||
TRACE_(bitmap)("%u scanlines of (%i,%i) -> (%i,%i) starting from %u\n",
|
TRACE_(bitmap)("%u scanlines of (%i,%i) -> (%i,%i) starting from %u\n",
|
||||||
lines, bmp->bitmap.bmWidth, bmp->bitmap.bmHeight,
|
lines, bmp->bitmap.bmWidth, bmp->bitmap.bmHeight,
|
||||||
|
@ -2909,13 +2907,9 @@ INT X11DRV_DIB_GetDIBits(
|
||||||
descr.colorMap = info->bmiColors;
|
descr.colorMap = info->bmiColors;
|
||||||
|
|
||||||
if (dib)
|
if (dib)
|
||||||
{
|
|
||||||
descr.useShm = (dib->shminfo.shmid != -1);
|
descr.useShm = (dib->shminfo.shmid != -1);
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
|
||||||
descr.useShm = FALSE;
|
descr.useShm = FALSE;
|
||||||
}
|
|
||||||
|
|
||||||
EnterCriticalSection( &X11DRV_CritSection );
|
EnterCriticalSection( &X11DRV_CritSection );
|
||||||
|
|
||||||
|
@ -2930,9 +2924,6 @@ INT X11DRV_DIB_GetDIBits(
|
||||||
info->bmiHeader.biHeight,
|
info->bmiHeader.biHeight,
|
||||||
info->bmiHeader.biBitCount );
|
info->bmiHeader.biBitCount );
|
||||||
|
|
||||||
if(bbits - (BYTE *)bits > info->bmiHeader.biSizeImage)
|
|
||||||
ERR_(bitmap)("Buffer overrun. Please investigate.\n");
|
|
||||||
|
|
||||||
info->bmiHeader.biCompression = 0;
|
info->bmiHeader.biCompression = 0;
|
||||||
|
|
||||||
GDI_HEAP_UNLOCK( dc->w.hPalette );
|
GDI_HEAP_UNLOCK( dc->w.hPalette );
|
||||||
|
|
|
@ -540,12 +540,12 @@ INT WINAPI GetDIBits(
|
||||||
/*FIXME: Only RGB dibs supported for now */
|
/*FIXME: Only RGB dibs supported for now */
|
||||||
int srcwidth = bmp->dib->dsBm.bmWidth, srcwidthb = bmp->dib->dsBm.bmWidthBytes;
|
int srcwidth = bmp->dib->dsBm.bmWidth, srcwidthb = bmp->dib->dsBm.bmWidthBytes;
|
||||||
int dstwidthb = DIB_GetDIBWidthBytes( info->bmiHeader.biWidth, info->bmiHeader.biBitCount );
|
int dstwidthb = DIB_GetDIBWidthBytes( info->bmiHeader.biWidth, info->bmiHeader.biBitCount );
|
||||||
LPVOID dbits = bits, sbits = bmp->dib->dsBm.bmBits + (startscan * srcwidthb);
|
LPBYTE dbits = bits, sbits = bmp->dib->dsBm.bmBits + (startscan * srcwidthb);
|
||||||
int x, y;
|
int x, y;
|
||||||
|
|
||||||
if ((info->bmiHeader.biHeight < 0) ^ (bmp->dib->dsBmih.biHeight < 0))
|
if ((info->bmiHeader.biHeight < 0) ^ (bmp->dib->dsBmih.biHeight < 0))
|
||||||
{
|
{
|
||||||
dbits = bits + (dstwidthb * (lines-1));
|
dbits = (LPBYTE)bits + (dstwidthb * (lines-1));
|
||||||
dstwidthb = -dstwidthb;
|
dstwidthb = -dstwidthb;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -571,7 +571,7 @@ INT WINAPI GetDIBits(
|
||||||
|
|
||||||
case 24: /* 24 bpp srcDIB -> 16 bpp dstDIB */
|
case 24: /* 24 bpp srcDIB -> 16 bpp dstDIB */
|
||||||
{
|
{
|
||||||
LPBYTE srcbits = (LPBYTE)sbits;
|
LPBYTE srcbits = sbits;
|
||||||
|
|
||||||
for( y = 0; y < lines; y++) {
|
for( y = 0; y < lines; y++) {
|
||||||
for( x = 0; x < srcwidth; x++ )
|
for( x = 0; x < srcwidth; x++ )
|
||||||
|
@ -579,7 +579,7 @@ INT WINAPI GetDIBits(
|
||||||
(((WORD)*srcbits++ << 2) & gmask) |
|
(((WORD)*srcbits++ << 2) & gmask) |
|
||||||
(((WORD)*srcbits++ << 7) & rmask);
|
(((WORD)*srcbits++ << 7) & rmask);
|
||||||
dstbits = (LPWORD)(dbits+=dstwidthb);
|
dstbits = (LPWORD)(dbits+=dstwidthb);
|
||||||
srcbits = (LPBYTE)(sbits += srcwidthb);
|
srcbits = (sbits += srcwidthb);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -611,7 +611,7 @@ INT WINAPI GetDIBits(
|
||||||
|
|
||||||
case 24: /* 24 bpp dstDIB */
|
case 24: /* 24 bpp dstDIB */
|
||||||
{
|
{
|
||||||
LPBYTE dstbits = (LPBYTE)dbits;
|
LPBYTE dstbits = dbits;
|
||||||
|
|
||||||
switch(bmp->dib->dsBm.bmBitsPixel) {
|
switch(bmp->dib->dsBm.bmBitsPixel) {
|
||||||
|
|
||||||
|
@ -686,22 +686,22 @@ INT WINAPI GetDIBits(
|
||||||
((val << 6) & 0xf800) | ((val << 1) & 0x0700) |
|
((val << 6) & 0xf800) | ((val << 1) & 0x0700) |
|
||||||
((val << 19) & 0xf800) | ((val << 14) & 0x070000);
|
((val << 19) & 0xf800) | ((val << 14) & 0x070000);
|
||||||
}
|
}
|
||||||
dstbits=(dbits+=dstwidthb);
|
dstbits=(LPDWORD)(dbits+=dstwidthb);
|
||||||
srcbits=(sbits+=srcwidthb);
|
srcbits=(LPWORD)(sbits+=srcwidthb);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 24: /* 24 bpp srcDIB -> 32 bpp dstDIB */
|
case 24: /* 24 bpp srcDIB -> 32 bpp dstDIB */
|
||||||
{
|
{
|
||||||
LPBYTE srcbits = (LPBYTE)sbits;
|
LPBYTE srcbits = sbits;
|
||||||
|
|
||||||
for( y = 0; y < lines; y++) {
|
for( y = 0; y < lines; y++) {
|
||||||
for( x = 0; x < srcwidth; x++ )
|
for( x = 0; x < srcwidth; x++ )
|
||||||
*dstbits++ = ((DWORD)*srcbits++ & rmask) |
|
*dstbits++ = ((DWORD)*srcbits++ & rmask) |
|
||||||
(((DWORD)*srcbits++ << 8) & gmask) |
|
(((DWORD)*srcbits++ << 8) & gmask) |
|
||||||
(((DWORD)*srcbits++ << 7) & bmask);
|
(((DWORD)*srcbits++ << 7) & bmask);
|
||||||
dstbits=(dbits+=dstwidthb);
|
dstbits=(LPDWORD)(dbits+=dstwidthb);
|
||||||
srcbits=(sbits+=srcwidthb);
|
srcbits=(sbits+=srcwidthb);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue