Ignore:
Timestamp:
04/22/11 10:02:20 (2 years ago)
Author:
glennrp
Message:

Decode the bKGD chunk properly with Q32 and Q64 builds.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • ImageMagick/trunk/coders/png.c

    r4270 r4271  
    20202020                      (int) mng_info->global_trns_length,NULL); 
    20212021                  } 
    2022 #if defined(PNG_READ_bKGD_SUPPORTED) 
     2022#ifdef PNG_READ_bKGD_SUPPORTED 
    20232023              if ( 
    20242024#ifndef PNG_READ_EMPTY_PLTE_SUPPORTED 
     
    20572057        } 
    20582058 
    2059 #if defined(PNG_READ_bKGD_SUPPORTED) 
     2059#ifdef PNG_READ_bKGD_SUPPORTED 
    20602060  if (mng_info->have_global_bkgd && 
    20612061          (!png_get_valid(ping,ping_info,PNG_INFO_bKGD))) 
     
    20642064  if (png_get_valid(ping,ping_info,PNG_INFO_bKGD)) 
    20652065    { 
     2066      unsigned int 
     2067        bkgd_scale; 
     2068 
    20662069      /* 
    20672070        Set image background color. 
     
    20712074          "    Reading PNG bKGD chunk."); 
    20722075 
    2073       if (ping_bit_depth == MAGICKCORE_QUANTUM_DEPTH) 
    2074         { 
    2075           image->background_color.red=ping_background->red; 
    2076           image->background_color.green=ping_background->green; 
    2077           image->background_color.blue=ping_background->blue; 
    2078         } 
    2079  
    2080       else /* Scale background components to 16-bit */ 
    2081         { 
    2082           unsigned int 
    2083             bkgd_scale; 
    2084  
    2085           if (logging != MagickFalse) 
    2086             (void) LogMagickEvent(CoderEvent,GetMagickModule(), 
    2087               "    raw ping_background=(%d,%d,%d).",ping_background->red, 
    2088               ping_background->green,ping_background->blue); 
    2089  
    2090           bkgd_scale = 1; 
    2091  
    2092           if (ping_bit_depth == 1) 
    2093              bkgd_scale = 255; 
    2094  
    2095           else if (ping_bit_depth == 2) 
    2096              bkgd_scale = 85; 
    2097  
    2098           else if (ping_bit_depth == 4) 
    2099              bkgd_scale = 17; 
    2100  
    2101           if (ping_bit_depth <= 8) 
    2102              bkgd_scale *= 257; 
    2103  
    2104           ping_background->red *= bkgd_scale; 
    2105           ping_background->green *= bkgd_scale; 
    2106           ping_background->blue *= bkgd_scale; 
    2107  
    2108           if (logging != MagickFalse) 
    2109             { 
     2076      /* Scale background components to 16-bit, then scale 
     2077       * to quantum depth 
     2078       */ 
     2079        if (logging != MagickFalse) 
     2080          (void) LogMagickEvent(CoderEvent,GetMagickModule(), 
     2081            "    raw ping_background=(%d,%d,%d).",ping_background->red, 
     2082            ping_background->green,ping_background->blue); 
     2083 
     2084        bkgd_scale = 1; 
     2085 
     2086        if (ping_bit_depth == 1) 
     2087           bkgd_scale = 255; 
     2088 
     2089        else if (ping_bit_depth == 2) 
     2090           bkgd_scale = 85; 
     2091 
     2092        else if (ping_bit_depth == 4) 
     2093           bkgd_scale = 17; 
     2094 
     2095        if (ping_bit_depth <= 8) 
     2096           bkgd_scale *= 257; 
     2097 
     2098        ping_background->red *= bkgd_scale; 
     2099        ping_background->green *= bkgd_scale; 
     2100        ping_background->blue *= bkgd_scale; 
     2101 
     2102        if (logging != MagickFalse) 
     2103          { 
    21102104            (void) LogMagickEvent(CoderEvent,GetMagickModule(), 
    21112105              "    bkgd_scale=%d.",bkgd_scale); 
     
    21142108              "    ping_background=(%d,%d,%d).",ping_background->red, 
    21152109              ping_background->green,ping_background->blue); 
    2116             } 
    2117  
    2118           image->background_color.red= 
     2110          } 
     2111 
     2112        image->background_color.red= 
    21192113            ScaleShortToQuantum(ping_background->red); 
    21202114 
    2121           image->background_color.green= 
     2115        image->background_color.green= 
    21222116            ScaleShortToQuantum(ping_background->green); 
    21232117 
    2124           image->background_color.blue= 
    2125             ScaleShortToQuantum(ping_background->blue); 
    2126  
    2127           image->background_color.opacity=OpaqueOpacity; 
    2128  
    2129           if (logging != MagickFalse) 
    2130             (void) LogMagickEvent(CoderEvent,GetMagickModule(), 
    2131               "    image->background_color=(%.20g,%.20g,%.20g).", 
    2132               (double) image->background_color.red, 
    2133               (double) image->background_color.green, 
    2134               (double) image->background_color.blue); 
    2135         } 
    2136     } 
    2137 #endif 
     2118        image->background_color.blue= 
     2119          ScaleShortToQuantum(ping_background->blue); 
     2120 
     2121        image->background_color.opacity=OpaqueOpacity; 
     2122 
     2123        if (logging != MagickFalse) 
     2124          (void) LogMagickEvent(CoderEvent,GetMagickModule(), 
     2125            "    image->background_color=(%.20g,%.20g,%.20g).", 
     2126            (double) image->background_color.red, 
     2127            (double) image->background_color.green, 
     2128            (double) image->background_color.blue); 
     2129    } 
     2130#endif /* PNG_READ_bKGD_SUPPORTED */ 
    21382131 
    21392132  if (png_get_valid(ping,ping_info,PNG_INFO_tRNS)) 
Note: See TracChangeset for help on using the changeset viewer.