mirror of
https://github.com/reactos/reactos.git
synced 2025-08-05 23:03:00 +00:00
- Fixed more color handling issues (mostly incorrect RGB <-> BGR swapping).
svn path=/trunk/; revision=9915
This commit is contained in:
parent
a630cd560f
commit
f2e5d4cd25
5 changed files with 20 additions and 75 deletions
|
@ -16,7 +16,7 @@
|
||||||
* along with this program; if not, write to the Free Software
|
* along with this program; if not, write to the Free Software
|
||||||
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||||
*/
|
*/
|
||||||
/* $Id: xlate.c,v 1.36 2004/06/28 15:53:17 navaraf Exp $
|
/* $Id: xlate.c,v 1.37 2004/06/28 17:03:35 navaraf Exp $
|
||||||
*
|
*
|
||||||
* COPYRIGHT: See COPYING in the top level directory
|
* COPYRIGHT: See COPYING in the top level directory
|
||||||
* PROJECT: ReactOS kernel
|
* PROJECT: ReactOS kernel
|
||||||
|
@ -342,10 +342,10 @@ XLATEOBJ * STDCALL IntEngCreateMonoXlate(
|
||||||
XlateGDI->BackgroundColor = NtGdiGetNearestPaletteIndex(
|
XlateGDI->BackgroundColor = NtGdiGetNearestPaletteIndex(
|
||||||
PaletteSource, BackgroundColor);
|
PaletteSource, BackgroundColor);
|
||||||
break;
|
break;
|
||||||
case PAL_RGB:
|
case PAL_BGR:
|
||||||
XlateGDI->BackgroundColor = BackgroundColor;
|
XlateGDI->BackgroundColor = BackgroundColor;
|
||||||
break;
|
break;
|
||||||
case PAL_BGR:
|
case PAL_RGB:
|
||||||
XlateGDI->BackgroundColor =
|
XlateGDI->BackgroundColor =
|
||||||
((BackgroundColor & 0xFF) << 16) |
|
((BackgroundColor & 0xFF) << 16) |
|
||||||
((BackgroundColor & 0xFF0000) >> 16) |
|
((BackgroundColor & 0xFF0000) >> 16) |
|
||||||
|
|
|
@ -16,7 +16,7 @@
|
||||||
* along with this program; if not, write to the Free Software
|
* along with this program; if not, write to the Free Software
|
||||||
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||||
*/
|
*/
|
||||||
/* $Id: bitmaps.c,v 1.74 2004/06/20 00:45:37 navaraf Exp $ */
|
/* $Id: bitmaps.c,v 1.75 2004/06/28 17:03:35 navaraf Exp $ */
|
||||||
#include <w32k.h>
|
#include <w32k.h>
|
||||||
|
|
||||||
#define IN_RECT(r,x,y) \
|
#define IN_RECT(r,x,y) \
|
||||||
|
@ -193,7 +193,7 @@ NtGdiBitBlt(
|
||||||
|
|
||||||
Colors[0] = DCSrc->w.textColor;
|
Colors[0] = DCSrc->w.textColor;
|
||||||
Colors[1] = DCSrc->w.backgroundColor;
|
Colors[1] = DCSrc->w.backgroundColor;
|
||||||
Mono = EngCreatePalette(PAL_INDEXED, 2, Colors, 0, 0, 0);
|
Mono = PALETTE_AllocPaletteIndexedRGB(2, (RGBQUAD*)Colors);
|
||||||
if (NULL != Mono)
|
if (NULL != Mono)
|
||||||
{
|
{
|
||||||
XlateObj = (XLATEOBJ*)IntEngCreateXlate(DestMode, PAL_INDEXED, DestPalette, Mono);
|
XlateObj = (XLATEOBJ*)IntEngCreateXlate(DestMode, PAL_INDEXED, DestPalette, Mono);
|
||||||
|
@ -630,6 +630,7 @@ NtGdiGetPixel(HDC hDC, INT XPos, INT YPos)
|
||||||
PalMode = PalGDI->Mode;
|
PalMode = PalGDI->Mode;
|
||||||
PALETTE_UnlockPalette(Pal);
|
PALETTE_UnlockPalette(Pal);
|
||||||
|
|
||||||
|
/* FIXME: Verify if it shouldn't be PAL_BGR! */
|
||||||
XlateObj = (XLATEOBJ*)IntEngCreateXlate ( PAL_RGB, PalMode, NULL, Pal );
|
XlateObj = (XLATEOBJ*)IntEngCreateXlate ( PAL_RGB, PalMode, NULL, Pal );
|
||||||
if ( XlateObj )
|
if ( XlateObj )
|
||||||
{
|
{
|
||||||
|
|
|
@ -16,7 +16,7 @@
|
||||||
* along with this program; if not, write to the Free Software
|
* along with this program; if not, write to the Free Software
|
||||||
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||||
*/
|
*/
|
||||||
/* $Id: color.c,v 1.43 2004/06/23 15:30:20 weiden Exp $ */
|
/* $Id: color.c,v 1.44 2004/06/28 17:03:35 navaraf Exp $ */
|
||||||
#include <w32k.h>
|
#include <w32k.h>
|
||||||
|
|
||||||
// FIXME: Use PXLATEOBJ logicalToSystem instead of int *mapping
|
// FIXME: Use PXLATEOBJ logicalToSystem instead of int *mapping
|
||||||
|
@ -200,7 +200,7 @@ UINT STDCALL NtGdiGetNearestPaletteIndex(HPALETTE hpal,
|
||||||
if (NULL != palGDI)
|
if (NULL != palGDI)
|
||||||
{
|
{
|
||||||
/* Return closest match for the given RGB color */
|
/* Return closest match for the given RGB color */
|
||||||
index = COLOR_PaletteLookupPixel((LPPALETTEENTRY)palGDI->IndexedColors, palGDI->NumColors, NULL, Color, FALSE);
|
index = COLOR_PaletteLookupPixel(palGDI->IndexedColors, palGDI->NumColors, NULL, Color, FALSE);
|
||||||
PALETTE_UnlockPalette(hpal);
|
PALETTE_UnlockPalette(hpal);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -233,7 +233,7 @@ UINT STDCALL NtGdiGetPaletteEntries(HPALETTE hpal,
|
||||||
PALETTE_UnlockPalette(hpal);
|
PALETTE_UnlockPalette(hpal);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
memcpy(pe, &palGDI->IndexedColors[StartIndex], Entries * sizeof(PALETTEENTRY));
|
memcpy(pe, palGDI->IndexedColors + StartIndex, Entries * sizeof(PALETTEENTRY));
|
||||||
for (numEntries = 0; numEntries < Entries; numEntries++)
|
for (numEntries = 0; numEntries < Entries; numEntries++)
|
||||||
{
|
{
|
||||||
if (pe[numEntries].peFlags & 0xF0)
|
if (pe[numEntries].peFlags & 0xF0)
|
||||||
|
@ -493,7 +493,7 @@ UINT STDCALL NtGdiSetPaletteEntries(HPALETTE hpal,
|
||||||
{
|
{
|
||||||
Entries = numEntries - Start;
|
Entries = numEntries - Start;
|
||||||
}
|
}
|
||||||
memcpy(&palGDI->IndexedColors[Start], pe, Entries * sizeof(PALETTEENTRY));
|
memcpy(palGDI->IndexedColors + Start, pe, Entries * sizeof(PALETTEENTRY));
|
||||||
PALETTE_ValidateFlags(palGDI->IndexedColors, palGDI->NumColors);
|
PALETTE_ValidateFlags(palGDI->IndexedColors, palGDI->NumColors);
|
||||||
ExFreePool(palGDI->logicalToSystem);
|
ExFreePool(palGDI->logicalToSystem);
|
||||||
palGDI->logicalToSystem = NULL;
|
palGDI->logicalToSystem = NULL;
|
||||||
|
@ -536,8 +536,10 @@ INT STDCALL COLOR_PaletteLookupPixel(PALETTEENTRY *palPalEntry, INT size,
|
||||||
|
|
||||||
for( i = 0; i < size && diff ; i++ )
|
for( i = 0; i < size && diff ; i++ )
|
||||||
{
|
{
|
||||||
|
#if 0
|
||||||
if(!(palPalEntry[i].peFlags & PC_SYS_USED) || (skipReserved && palPalEntry[i].peFlags & PC_SYS_RESERVED))
|
if(!(palPalEntry[i].peFlags & PC_SYS_USED) || (skipReserved && palPalEntry[i].peFlags & PC_SYS_RESERVED))
|
||||||
continue;
|
continue;
|
||||||
|
#endif
|
||||||
|
|
||||||
r = palPalEntry[i].peRed - GetRValue(col);
|
r = palPalEntry[i].peRed - GetRValue(col);
|
||||||
g = palPalEntry[i].peGreen - GetGValue(col);
|
g = palPalEntry[i].peGreen - GetGValue(col);
|
||||||
|
@ -556,7 +558,6 @@ INT STDCALL COLOR_PaletteLookupPixel(PALETTEENTRY *palPalEntry, INT size,
|
||||||
|
|
||||||
COLORREF STDCALL COLOR_LookupNearestColor( PALETTEENTRY* palPalEntry, int size, COLORREF color )
|
COLORREF STDCALL COLOR_LookupNearestColor( PALETTEENTRY* palPalEntry, int size, COLORREF color )
|
||||||
{
|
{
|
||||||
#if 1
|
|
||||||
INT index;
|
INT index;
|
||||||
|
|
||||||
index = COLOR_PaletteLookupPixel(palPalEntry, size, NULL, color, FALSE);
|
index = COLOR_PaletteLookupPixel(palPalEntry, size, NULL, color, FALSE);
|
||||||
|
@ -564,29 +565,6 @@ COLORREF STDCALL COLOR_LookupNearestColor( PALETTEENTRY* palPalEntry, int size,
|
||||||
palPalEntry[index].peRed,
|
palPalEntry[index].peRed,
|
||||||
palPalEntry[index].peGreen,
|
palPalEntry[index].peGreen,
|
||||||
palPalEntry[index].peBlue);
|
palPalEntry[index].peBlue);
|
||||||
#else
|
|
||||||
unsigned char spec_type = color >> 24;
|
|
||||||
int i;
|
|
||||||
PALETTEENTRY *COLOR_sysPal = (PALETTEENTRY*)ReturnSystemPalette();
|
|
||||||
|
|
||||||
// we need logical palette for PALETTERGB and PALETTEINDEX colorrefs
|
|
||||||
|
|
||||||
if( spec_type == 2 ) /* PALETTERGB */
|
|
||||||
color = *(COLORREF*)(palPalEntry + COLOR_PaletteLookupPixel(palPalEntry,size,NULL,color,FALSE));
|
|
||||||
|
|
||||||
else if( spec_type == 1 ) /* PALETTEINDEX */
|
|
||||||
{
|
|
||||||
if( (i = color & 0x0000ffff) >= size )
|
|
||||||
{
|
|
||||||
DbgPrint("RGB(%lx) : idx %d is out of bounds, assuming NULL\n", color, i);
|
|
||||||
color = *(COLORREF*)palPalEntry;
|
|
||||||
}
|
|
||||||
else color = *(COLORREF*)(palPalEntry + i);
|
|
||||||
}
|
|
||||||
|
|
||||||
color &= 0x00ffffff;
|
|
||||||
return (0x00ffffff & *(COLORREF*)(COLOR_sysPal + COLOR_PaletteLookupPixel(COLOR_sysPal, 256, NULL, color, FALSE)));
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int STDCALL COLOR_PaletteLookupExactIndex( PALETTEENTRY* palPalEntry, int size,
|
int STDCALL COLOR_PaletteLookupExactIndex( PALETTEENTRY* palPalEntry, int size,
|
||||||
|
|
|
@ -16,7 +16,7 @@
|
||||||
* along with this program; if not, write to the Free Software
|
* along with this program; if not, write to the Free Software
|
||||||
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||||
*/
|
*/
|
||||||
/* $Id: dc.c,v 1.139 2004/06/20 00:45:37 navaraf Exp $
|
/* $Id: dc.c,v 1.140 2004/06/28 17:03:35 navaraf Exp $
|
||||||
*
|
*
|
||||||
* DC.C - Device context functions
|
* DC.C - Device context functions
|
||||||
*
|
*
|
||||||
|
@ -1749,9 +1749,8 @@ NtGdiSelectObject(HDC hDC, HGDIOBJ hGDIObj)
|
||||||
XLATEOBJ *XlateObj;
|
XLATEOBJ *XlateObj;
|
||||||
PPALGDI PalGDI;
|
PPALGDI PalGDI;
|
||||||
DWORD objectType;
|
DWORD objectType;
|
||||||
COLORREF *ColorMap;
|
|
||||||
COLORREF MonoColorMap[2];
|
COLORREF MonoColorMap[2];
|
||||||
ULONG NumColors, Index;
|
ULONG NumColors;
|
||||||
HRGN hVisRgn;
|
HRGN hVisRgn;
|
||||||
USHORT Mode;
|
USHORT Mode;
|
||||||
|
|
||||||
|
@ -1903,17 +1902,7 @@ NtGdiSelectObject(HDC hDC, HGDIOBJ hGDIObj)
|
||||||
if(pb->dib->dsBmih.biBitCount == 1) { NumColors = 2; } else
|
if(pb->dib->dsBmih.biBitCount == 1) { NumColors = 2; } else
|
||||||
if(pb->dib->dsBmih.biBitCount == 4) { NumColors = 16; } else
|
if(pb->dib->dsBmih.biBitCount == 4) { NumColors = 16; } else
|
||||||
if(pb->dib->dsBmih.biBitCount == 8) { NumColors = 256; }
|
if(pb->dib->dsBmih.biBitCount == 8) { NumColors = 256; }
|
||||||
|
dc->w.hPalette = PALETTE_AllocPaletteIndexedRGB(NumColors, pb->ColorMap);
|
||||||
ColorMap = ExAllocatePoolWithTag(PagedPool, sizeof(COLORREF) * NumColors, TAG_DC);
|
|
||||||
ASSERT(ColorMap);
|
|
||||||
for (Index = 0; Index < NumColors; Index++)
|
|
||||||
{
|
|
||||||
ColorMap[Index] = RGB(pb->ColorMap[Index].rgbRed,
|
|
||||||
pb->ColorMap[Index].rgbGreen,
|
|
||||||
pb->ColorMap[Index].rgbBlue);
|
|
||||||
}
|
|
||||||
dc->w.hPalette = PALETTE_AllocPalette(PAL_INDEXED, NumColors, (ULONG *) ColorMap, 0, 0, 0);
|
|
||||||
ExFreePool(ColorMap);
|
|
||||||
}
|
}
|
||||||
else if ( 16 == pb->dib->dsBmih.biBitCount )
|
else if ( 16 == pb->dib->dsBmih.biBitCount )
|
||||||
{
|
{
|
||||||
|
@ -1931,7 +1920,7 @@ NtGdiSelectObject(HDC hDC, HGDIOBJ hGDIObj)
|
||||||
{
|
{
|
||||||
MonoColorMap[0] = RGB(0, 0, 0);
|
MonoColorMap[0] = RGB(0, 0, 0);
|
||||||
MonoColorMap[1] = RGB(255, 255, 255);
|
MonoColorMap[1] = RGB(255, 255, 255);
|
||||||
dc->w.hPalette = PALETTE_AllocPalette(PAL_INDEXED, 2, MonoColorMap, 0, 0, 0);
|
dc->w.hPalette = PALETTE_AllocPaletteIndexedRGB(2, (RGBQUAD*)MonoColorMap);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* $Id: dib.c,v 1.53 2004/06/23 07:31:22 gvg Exp $
|
* $Id: dib.c,v 1.54 2004/06/28 17:03:35 navaraf Exp $
|
||||||
*
|
*
|
||||||
* ReactOS W32 Subsystem
|
* ReactOS W32 Subsystem
|
||||||
* Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 ReactOS Team
|
* Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 ReactOS Team
|
||||||
|
@ -1350,27 +1350,6 @@ DIB_MapPaletteColors(PDC dc, CONST BITMAPINFO* lpbmi)
|
||||||
return lpRGB;
|
return lpRGB;
|
||||||
}
|
}
|
||||||
|
|
||||||
PPALETTEENTRY STDCALL
|
|
||||||
DIBColorTableToPaletteEntries (
|
|
||||||
PPALETTEENTRY palEntries,
|
|
||||||
const RGBQUAD *DIBColorTable,
|
|
||||||
ULONG ColorCount
|
|
||||||
)
|
|
||||||
{
|
|
||||||
ULONG i;
|
|
||||||
|
|
||||||
for (i = 0; i < ColorCount; i++)
|
|
||||||
{
|
|
||||||
palEntries->peRed = DIBColorTable->rgbRed;
|
|
||||||
palEntries->peGreen = DIBColorTable->rgbGreen;
|
|
||||||
palEntries->peBlue = DIBColorTable->rgbBlue;
|
|
||||||
palEntries++;
|
|
||||||
DIBColorTable++;
|
|
||||||
}
|
|
||||||
|
|
||||||
return palEntries;
|
|
||||||
}
|
|
||||||
|
|
||||||
HPALETTE FASTCALL
|
HPALETTE FASTCALL
|
||||||
BuildDIBPalette (PBITMAPINFO bmi, PINT paletteType)
|
BuildDIBPalette (PBITMAPINFO bmi, PINT paletteType)
|
||||||
{
|
{
|
||||||
|
@ -1407,13 +1386,11 @@ BuildDIBPalette (PBITMAPINFO bmi, PINT paletteType)
|
||||||
|
|
||||||
if (PAL_INDEXED == *paletteType)
|
if (PAL_INDEXED == *paletteType)
|
||||||
{
|
{
|
||||||
palEntries = ExAllocatePoolWithTag(PagedPool, sizeof(PALETTEENTRY)*ColorCount, TAG_COLORMAP);
|
hPal = PALETTE_AllocPaletteIndexedRGB(ColorCount, (RGBQUAD*)bmi->bmiColors);
|
||||||
DIBColorTableToPaletteEntries(palEntries, bmi->bmiColors, ColorCount);
|
|
||||||
}
|
}
|
||||||
hPal = PALETTE_AllocPalette( *paletteType, ColorCount, (ULONG*)palEntries, 0, 0, 0 );
|
else
|
||||||
if (NULL != palEntries)
|
|
||||||
{
|
{
|
||||||
ExFreePool(palEntries);
|
hPal = PALETTE_AllocPalette( *paletteType, ColorCount, (ULONG*)palEntries, 0, 0, 0 );
|
||||||
}
|
}
|
||||||
|
|
||||||
return hPal;
|
return hPal;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue