MCPcopy Create free account
hub / github.com/DentonW/DevIL / iConvertPalette

Function iConvertPalette

DevIL/src-IL/src/il_convert.cpp:18–266  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

16
17
18ILimage *iConvertPalette(ILimage *Image, ILenum DestFormat)
19{
20 static const ILfloat LumFactor[3] = { 0.212671f, 0.715160f, 0.072169f }; // http://www.inforamp.net/~poynton/ and libpng's libpng.txt - Used for conversion to luminance.
21 ILimage *NewImage = NULL, *CurImage = NULL;
22 ILuint i, j, k, c, Size, LumBpp = 1;
23 ILfloat Resultf;
24 ILubyte *Temp = NULL;
25 ILboolean Converted;
26 ILboolean HasAlpha;
27
28 NewImage = (ILimage*)icalloc(1, sizeof(ILimage)); // Much better to have it all set to 0.
29 if (NewImage == NULL) {
30 return IL_FALSE;
31 }
32
33 ilCopyImageAttr(NewImage, Image);
34
35 if (!Image->Pal.Palette || !Image->Pal.PalSize || Image->Pal.PalType == IL_PAL_NONE || Image->Bpp != 1) {
36 ilCloseImage(NewImage);
37 ilSetError(IL_ILLEGAL_OPERATION);
38 return NULL;
39 }
40
41 if (DestFormat == IL_LUMINANCE || DestFormat == IL_LUMINANCE_ALPHA) {
42 if (NewImage->Pal.Palette)
43 ifree(NewImage->Pal.Palette);
44 if (DestFormat == IL_LUMINANCE_ALPHA)
45 LumBpp = 2;
46
47 switch (iCurImage->Pal.PalType)
48 {
49 case IL_PAL_RGB24:
50 case IL_PAL_RGB32:
51 case IL_PAL_RGBA32:
52 Temp = (ILubyte*)ialloc(LumBpp * Image->Pal.PalSize / ilGetBppPal(Image->Pal.PalType));
53 if (Temp == NULL)
54 goto alloc_error;
55
56 Size = ilGetBppPal(Image->Pal.PalType);
57 for (i = 0, k = 0; i < Image->Pal.PalSize; i += Size, k += LumBpp) {
58 Resultf = 0.0f;
59 for (c = 0; c < Size; c++) {
60 Resultf += Image->Pal.Palette[i + c] * LumFactor[c];
61 }
62 Temp[k] = (ILubyte)Resultf;
63 if (LumBpp == 2) {
64 if (iCurImage->Pal.PalType == IL_PAL_RGBA32)
65 Temp[k+1] = Image->Pal.Palette[i + 3];
66 else
67 Temp[k+1] = 0xff;
68 }
69 }
70
71 break;
72
73 case IL_PAL_BGR24:
74 case IL_PAL_BGR32:
75 case IL_PAL_BGRA32:

Callers 2

ILAPIENTRY iConvertImageFunction · 0.85

Calls 7

ilCopyImageAttrFunction · 0.85
ilCloseImageFunction · 0.85
ilSetErrorFunction · 0.85
ilGetBppPalFunction · 0.85
ilGetBppFormatFunction · 0.85
ilSetCurImageFunction · 0.85
ilResizeImageFunction · 0.85

Tested by

no test coverage detected