MCPcopy Create free account
hub / github.com/DentonW/DevIL / ILAPIENTRY iConvertPal

Function ILAPIENTRY iConvertPal

DevIL/src-IL/src/il_pal.cpp:587–840  ·  view source on GitHub ↗

Converts the palette to the DestFormat format.

Source from the content-addressed store, hash-verified

585
586// Converts the palette to the DestFormat format.
587ILAPI ILpal* ILAPIENTRY iConvertPal(ILpal *Pal, ILenum DestFormat)
588{
589 ILpal *NewPal = NULL;
590 ILuint i, j, NewPalSize;
591
592 // Checks to see if the current image is valid and has a palette
593 if (Pal == NULL || Pal->PalSize == 0 || Pal->Palette == NULL || Pal->PalType == IL_PAL_NONE) {
594 ilSetError(IL_ILLEGAL_OPERATION);
595 return NULL;
596 }
597
598 /*if (Pal->PalType == DestFormat) {
599 return NULL;
600 }*/
601
602 NewPal = (ILpal*)ialloc(sizeof(ILpal));
603 if (NewPal == NULL) {
604 return NULL;
605 }
606 NewPal->PalSize = Pal->PalSize;
607 NewPal->PalType = Pal->PalType;
608
609 switch (DestFormat)
610 {
611 case IL_PAL_RGB24:
612 case IL_PAL_BGR24:
613 switch (Pal->PalType)
614 {
615 case IL_PAL_RGB24:
616 NewPal->Palette = (ILubyte*)ialloc(Pal->PalSize);
617 if (NewPal->Palette == NULL)
618 goto alloc_error;
619 if (DestFormat == IL_PAL_BGR24) {
620 j = ilGetBppPal(Pal->PalType);
621 for (i = 0; i < Pal->PalSize; i += j) {
622 NewPal->Palette[i] = Pal->Palette[i+2];
623 NewPal->Palette[i+1] = Pal->Palette[i+1];
624 NewPal->Palette[i+2] = Pal->Palette[i];
625 }
626 }
627 else {
628 memcpy(NewPal->Palette, Pal->Palette, Pal->PalSize);
629 }
630 NewPal->PalType = DestFormat;
631 break;
632
633 case IL_PAL_BGR24:
634 NewPal->Palette = (ILubyte*)ialloc(Pal->PalSize);
635 if (NewPal->Palette == NULL)
636 goto alloc_error;
637 if (DestFormat == IL_PAL_RGB24) {
638 j = ilGetBppPal(Pal->PalType);
639 for (i = 0; i < Pal->PalSize; i += j) {
640 NewPal->Palette[i] = Pal->Palette[i+2];
641 NewPal->Palette[i+1] = Pal->Palette[i+1];
642 NewPal->Palette[i+2] = Pal->Palette[i];
643 }
644 }

Callers

nothing calls this directly

Calls 2

ilSetErrorFunction · 0.85
ilGetBppPalFunction · 0.85

Tested by

no test coverage detected