diff --git a/libfreerdp/codec/color.c b/libfreerdp/codec/color.c index 4a2aa6021..68076f337 100644 --- a/libfreerdp/codec/color.c +++ b/libfreerdp/codec/color.c @@ -342,6 +342,17 @@ UINT32 freerdp_color_convert_var(UINT32 srcColor, int srcBpp, int dstBpp, HCLRCO UINT32 freerdp_color_convert_var_rgb(UINT32 srcColor, int srcBpp, int dstBpp, HCLRCONV clrconv) { + if (srcBpp == 8) + { + BYTE alpha = 0xFF; + UINT32 dstColor = 0; + PALETTE_ENTRY* entry = &clrconv->palette->entries[srcColor & 0xFF]; + + freerdp_color_make_bgr(&dstColor, dstBpp, &entry->red, &entry->green, &entry->blue, &alpha, clrconv); + + return dstColor; + } + if (srcBpp > 16) return freerdp_color_convert_bgr_rgb(srcColor, srcBpp, dstBpp, clrconv); else diff --git a/libfreerdp/gdi/test/.gitignore b/libfreerdp/gdi/test/.gitignore index 6c68d0825..6db1b7ced 100644 --- a/libfreerdp/gdi/test/.gitignore +++ b/libfreerdp/gdi/test/.gitignore @@ -1,2 +1,2 @@ -TestCore -TestCore.c +TestGdi +TestGdi.c diff --git a/libfreerdp/gdi/test/TestGdi.c b/libfreerdp/gdi/test/TestGdi.c deleted file mode 100644 index 4149af45e..000000000 --- a/libfreerdp/gdi/test/TestGdi.c +++ /dev/null @@ -1,160 +0,0 @@ -#include -#include -#include -#include - - - - -/* Forward declare test functions. */ -int TestGdiRop3(int, char*[]); - - -/* Create map. */ - -typedef int (*MainFuncPointer)(int , char*[]); -typedef struct -{ - const char* name; - MainFuncPointer func; -} functionMapEntry; - -functionMapEntry cmakeGeneratedFunctionMapEntries[] = { - { - "TestGdiRop3", - TestGdiRop3 - }, - - {0,0} -}; - -/* Allocate and create a lowercased copy of string - (note that it has to be free'd manually) */ - -char* lowercase(const char *string) -{ - char *new_string, *p; - -#ifdef __cplusplus - new_string = static_cast(malloc(sizeof(char) * - static_cast(strlen(string) + 1))); -#else - new_string = (char *)(malloc(sizeof(char) * (size_t)(strlen(string) + 1))); -#endif - - if (!new_string) - { - return 0; - } - strcpy(new_string, string); - p = new_string; - while (*p != 0) - { -#ifdef __cplusplus - *p = static_cast(tolower(*p)); -#else - *p = (char)(tolower(*p)); -#endif - - ++p; - } - return new_string; -} - -int main(int ac, char *av[]) -{ - int i, NumTests, testNum, partial_match; - char *arg, *test_name; - int count; - int testToRun = -1; - - - - for(count =0; cmakeGeneratedFunctionMapEntries[count].name != 0; count++) - { - } - NumTests = count; - /* If no test name was given */ - /* process command line with user function. */ - if (ac < 2) - { - /* Ask for a test. */ - printf("Available tests:\n"); - for (i =0; i < NumTests; ++i) - { - printf("%3d. %s\n", i, cmakeGeneratedFunctionMapEntries[i].name); - } - printf("To run a test, enter the test number: "); - fflush(stdout); - testNum = 0; - if( scanf("%d", &testNum) != 1 ) - { - printf("Couldn't parse that input as a number\n"); - return -1; - } - if (testNum >= NumTests) - { - printf("%3d is an invalid test number.\n", testNum); - return -1; - } - testToRun = testNum; - ac--; - av++; - } - partial_match = 0; - arg = 0; - /* If partial match is requested. */ - if(testToRun == -1 && ac > 1) - { - partial_match = (strcmp(av[1], "-R") == 0) ? 1 : 0; - } - if (partial_match && ac < 3) - { - printf("-R needs an additional parameter.\n"); - return -1; - } - if(testToRun == -1) - { - arg = lowercase(av[1 + partial_match]); - } - for (i =0; i < NumTests && testToRun == -1; ++i) - { - test_name = lowercase(cmakeGeneratedFunctionMapEntries[i].name); - if (partial_match && strstr(test_name, arg) != NULL) - { - testToRun = i; - ac -=2; - av += 2; - } - else if (!partial_match && strcmp(test_name, arg) == 0) - { - testToRun = i; - ac--; - av++; - } - free(test_name); - } - if(arg) - { - free(arg); - } - if(testToRun != -1) - { - int result; - - result = (*cmakeGeneratedFunctionMapEntries[testToRun].func)(ac, av); - - return result; - } - - - /* Nothing was run, display the test names. */ - printf("Available tests:\n"); - for (i =0; i < NumTests; ++i) - { - printf("%3d. %s\n", i, cmakeGeneratedFunctionMapEntries[i].name); - } - printf("Failed: %s is an invalid test name.\n", av[1]); - - return -1; -}