Merge pull request #6839 from thierrylamarre:better_png_transparency
This commit is contained in:
commit
1e17ffe9ac
@ -190,16 +190,14 @@ bool PngDecoder::readHeader()
|
|||||||
switch(color_type)
|
switch(color_type)
|
||||||
{
|
{
|
||||||
case PNG_COLOR_TYPE_RGB:
|
case PNG_COLOR_TYPE_RGB:
|
||||||
m_type = CV_8UC3;
|
|
||||||
break;
|
|
||||||
case PNG_COLOR_TYPE_PALETTE:
|
case PNG_COLOR_TYPE_PALETTE:
|
||||||
png_get_tRNS( png_ptr, info_ptr, &trans, &num_trans, &trans_values);
|
png_get_tRNS(png_ptr, info_ptr, &trans, &num_trans, &trans_values);
|
||||||
//Check if there is a transparency value in the palette
|
if( num_trans > 0 )
|
||||||
if ( num_trans > 0 )
|
|
||||||
m_type = CV_8UC4;
|
m_type = CV_8UC4;
|
||||||
else
|
else
|
||||||
m_type = CV_8UC3;
|
m_type = CV_8UC3;
|
||||||
break;
|
break;
|
||||||
|
case PNG_COLOR_TYPE_GRAY_ALPHA:
|
||||||
case PNG_COLOR_TYPE_RGB_ALPHA:
|
case PNG_COLOR_TYPE_RGB_ALPHA:
|
||||||
m_type = CV_8UC4;
|
m_type = CV_8UC4;
|
||||||
break;
|
break;
|
||||||
@ -255,12 +253,13 @@ bool PngDecoder::readData( Mat& img )
|
|||||||
* stripping alpha.. 18.11.2004 Axel Walthelm
|
* stripping alpha.. 18.11.2004 Axel Walthelm
|
||||||
*/
|
*/
|
||||||
png_set_strip_alpha( png_ptr );
|
png_set_strip_alpha( png_ptr );
|
||||||
}
|
} else
|
||||||
|
png_set_tRNS_to_alpha( png_ptr );
|
||||||
|
|
||||||
if( m_color_type == PNG_COLOR_TYPE_PALETTE )
|
if( m_color_type == PNG_COLOR_TYPE_PALETTE )
|
||||||
png_set_palette_to_rgb( png_ptr );
|
png_set_palette_to_rgb( png_ptr );
|
||||||
|
|
||||||
if( m_color_type == PNG_COLOR_TYPE_GRAY && m_bit_depth < 8 )
|
if( (m_color_type & PNG_COLOR_MASK_COLOR) == 0 && m_bit_depth < 8 )
|
||||||
#if (PNG_LIBPNG_VER_MAJOR*10000 + PNG_LIBPNG_VER_MINOR*100 + PNG_LIBPNG_VER_RELEASE >= 10209) || \
|
#if (PNG_LIBPNG_VER_MAJOR*10000 + PNG_LIBPNG_VER_MINOR*100 + PNG_LIBPNG_VER_RELEASE >= 10209) || \
|
||||||
(PNG_LIBPNG_VER_MAJOR == 1 && PNG_LIBPNG_VER_MINOR == 0 && PNG_LIBPNG_VER_RELEASE >= 18)
|
(PNG_LIBPNG_VER_MAJOR == 1 && PNG_LIBPNG_VER_MINOR == 0 && PNG_LIBPNG_VER_RELEASE >= 18)
|
||||||
png_set_expand_gray_1_2_4_to_8( png_ptr );
|
png_set_expand_gray_1_2_4_to_8( png_ptr );
|
||||||
@ -268,7 +267,7 @@ bool PngDecoder::readData( Mat& img )
|
|||||||
png_set_gray_1_2_4_to_8( png_ptr );
|
png_set_gray_1_2_4_to_8( png_ptr );
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if( CV_MAT_CN(m_type) > 1 && color )
|
if( (m_color_type & PNG_COLOR_MASK_COLOR) && color )
|
||||||
png_set_bgr( png_ptr ); // convert RGB to BGR
|
png_set_bgr( png_ptr ); // convert RGB to BGR
|
||||||
else if( color )
|
else if( color )
|
||||||
png_set_gray_to_rgb( png_ptr ); // Gray->RGB
|
png_set_gray_to_rgb( png_ptr ); // Gray->RGB
|
||||||
|
Loading…
Reference in New Issue
Block a user