// Creates a palette of 90 colours in the spectrum of the rainbow. // George W. Taylor - May/2005 DWORD CreatePalette(LPDWORD pPalette) { LPDWORD pMin; DWORD i, crefA; DWORD countColours; ZeroMemory(pPalette, sizeof(DWORD) * 90); // Create a palette... countColours = 0; pMin = pPalette; *pMin = (255 << 16); ++pMin; ++countColours; // Red = 255 i = 1; for(;;) { *pMin = (255 << 16) + (i << 8); ++pMin; ++countColours; i *= 2; if(i > 128)break; } i = 64; crefA = 128; for(;;) { crefA += i; *pMin = (255 << 16) + (crefA << 8); ++pMin; ++countColours; i /= 2; if(i < 1)break; } // Red = 255, Green = 255 crefA = 255; i = 1; for(;;) { crefA -= i; *pMin = (crefA << 16) + (255 << 8); ++pMin; ++countColours; i *= 2; if(crefA == 128)break; } // Red = 128, Green = 255 crefA = 128; i = 64; for(;;) { crefA -= i; *pMin = (crefA << 16) + (255 << 8); ++pMin; ++countColours; i /= 2; if(!i)break; } *pMin = (255 << 8); ++pMin; ++countColours; // Red = 0, Green = 255 i = 1; for(;;) { *pMin = (255 << 8) + i; ++pMin; ++countColours; i *= 2; if(i > 128)break; } i = 64; crefA = 128; for(;;) { crefA += i; *pMin = (255 << 8) + crefA; ++pMin; ++countColours; i /= 2; if(i < 1)break; } // Green = 255, Blue = 255 crefA = 255; i = 1; for(;;) { crefA -= i; *pMin = (crefA << 8) + 255; ++pMin; ++countColours; i *= 2; if(crefA == 128)break; } // Green = 128, Blue = 255 crefA = 128; i = 64; for(;;) { crefA -= i; *pMin = (crefA << 8) + 255; ++pMin; ++countColours; i /= 2; if(!i)break; } *pMin = 255; ++pMin; ++countColours; // Green = 0, Blue = 255 i = 1; for(;;) { *pMin = (i << 16) + 255; ++pMin; ++countColours; i *= 2; if(i > 128)break; } i = 64; crefA = 128; for(;;) { crefA += i; *pMin = (crefA << 16) + 255; ++pMin; ++countColours; i /= 2; if(i < 1)break; } // Red = 255, Blue = 255 crefA = 255; i = 1; for(;;) { crefA -= i; *pMin = (255 << 16) + crefA; ++pMin; ++countColours; i *= 2; if(crefA == 128)break; } // Red = 255, Blue = 128 crefA = 128; i = 64; for(;;) { crefA -= i; *pMin = (255 << 16) + crefA; ++pMin; ++countColours; i /= 2; if(!i)break; } // Red = 255, Blue = 1 //********************* // Apply palette indexes for(DWORD y = 0; y < countColours; y++) { pPalette[y] |= (y << 24); } return countColours; }