]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
FS-7506 improve anti-aliasing when use a NULL bgcolor for transparent text
authorSeven Du <dujinfang@gmail.com>
Tue, 12 May 2015 01:18:12 +0000 (09:18 +0800)
committerMichael Jerris <mike@jerris.com>
Thu, 28 May 2015 17:47:30 +0000 (12:47 -0500)
src/switch_core_video.c

index 3303a87509c6bb7b2e4980170fab1ba014f4aae4..3c334a31e4ae14c7d0b32223efdbd4fadc419641 100644 (file)
@@ -653,14 +653,13 @@ static void draw_bitmap(switch_img_txt_handle_t *handle, switch_image_t *img, FT
 
        if (bitmap->width == 0) return;
 
-       switch_color_rgb2yuv(&handle->color, &yuv_color);
-
        switch (bitmap->pixel_mode) {
                case FT_PIXEL_MODE_GRAY: // it should always be GRAY since we use FT_LOAD_RENDER?
                        break;
                case FT_PIXEL_MODE_NONE:
                case FT_PIXEL_MODE_MONO:
                {
+                       switch_color_rgb2yuv(&handle->color, &yuv_color);
 
                        for ( j = y, q = 0; j < y_max; j++, q++ ) {
                                for ( i = x, p = 0; i < x_max; i++, p++ ) {
@@ -693,9 +692,16 @@ static void draw_bitmap(switch_img_txt_handle_t *handle, switch_image_t *img, FT
                        if (handle->use_bgcolor) {
                                switch_img_draw_pixel(img, i, j, &handle->gradient_table[gradient * MAX_GRADIENT / 256]);
                        } else {
-                               if (gradient > 128) {
-                                       switch_img_draw_pixel(img, i, j, &yuv_color);
-                               }
+                               switch_rgb_color_t rgb_color;
+                               switch_rgb_color_t c;
+                               switch_img_get_rgb_pixel(img, &rgb_color, i, j);
+
+                               c.r = ((rgb_color.r * (255 - gradient)) >> 8) + ((handle->color.r * gradient) >> 8);
+                               c.g = ((rgb_color.g * (255 - gradient)) >> 8) + ((handle->color.g * gradient) >> 8);
+                               c.b = ((rgb_color.b * (255 - gradient)) >> 8) + ((handle->color.b * gradient) >> 8);
+
+                               switch_color_rgb2yuv(&c, &yuv_color);
+                               switch_img_draw_pixel(img, i, j, &yuv_color);
                        }
                }
        }