"docs/vscode:/vscode.git/clone" did not exist on "a53ecd229b17064a5a4e3e7c87c87d04c2fdbf18"
Commit 97d6125f authored by Davis King's avatar Davis King
Browse files

Made the PNG loader able to load in grayscale images with an alpha channel.

parent f2a52a47
...@@ -73,6 +73,13 @@ namespace dlib ...@@ -73,6 +73,13 @@ namespace dlib
return ( color_type_ == PNG_COLOR_TYPE_GRAY ); return ( color_type_ == PNG_COLOR_TYPE_GRAY );
} }
// ----------------------------------------------------------------------------------------
bool png_loader::is_graya() const
{
return ( color_type_ == PNG_COLOR_TYPE_GRAY_ALPHA );
}
// ---------------------------------------------------------------------------------------- // ----------------------------------------------------------------------------------------
bool png_loader::is_rgb() const bool png_loader::is_rgb() const
...@@ -169,7 +176,8 @@ namespace dlib ...@@ -169,7 +176,8 @@ namespace dlib
if (color_type_ != PNG_COLOR_TYPE_GRAY && if (color_type_ != PNG_COLOR_TYPE_GRAY &&
color_type_ != PNG_COLOR_TYPE_RGB && color_type_ != PNG_COLOR_TYPE_RGB &&
color_type_ != PNG_COLOR_TYPE_RGB_ALPHA ) color_type_ != PNG_COLOR_TYPE_RGB_ALPHA &&
color_type_ != PNG_COLOR_TYPE_GRAY_ALPHA)
{ {
fclose( fp ); fclose( fp );
png_destroy_read_struct( &( ld_->png_ptr_ ), &( ld_->info_ptr_ ), &( ld_->end_info_ ) ); png_destroy_read_struct( &( ld_->png_ptr_ ), &( ld_->info_ptr_ ), &( ld_->end_info_ ) );
......
...@@ -23,6 +23,7 @@ namespace dlib ...@@ -23,6 +23,7 @@ namespace dlib
~png_loader(); ~png_loader();
bool is_gray() const; bool is_gray() const;
bool is_graya() const;
bool is_rgb() const; bool is_rgb() const;
bool is_rgba() const; bool is_rgba() const;
...@@ -41,6 +42,7 @@ namespace dlib ...@@ -41,6 +42,7 @@ namespace dlib
COMPILE_TIME_ASSERT(sizeof(T) == 0); COMPILE_TIME_ASSERT(sizeof(T) == 0);
#endif #endif
typedef typename T::type pixel_type;
t.set_size( height_, width_ ); t.set_size( height_, width_ );
...@@ -68,6 +70,52 @@ namespace dlib ...@@ -68,6 +70,52 @@ namespace dlib
} }
} }
} }
else if (is_graya() && bit_depth_ == 8)
{
for ( unsigned n = 0; n < height_;n++ )
{
const unsigned char* v = get_row( n );
for ( unsigned m = 0; m < width_; m++ )
{
unsigned char p = v[m*2];
if (!pixel_traits<pixel_type>::has_alpha)
{
assign_pixel( t[n][m], p );
}
else
{
unsigned char pa = v[m*2+1];
rgb_alpha_pixel pix;
assign_pixel(pix, p);
assign_pixel(pix.alpha, pa);
assign_pixel(t[n][m], pix);
}
}
}
}
else if (is_graya() && bit_depth_ == 16)
{
for ( unsigned n = 0; n < height_;n++ )
{
const uint16* v = (uint16*)get_row( n );
for ( unsigned m = 0; m < width_; m++ )
{
dlib::uint16 p = v[m*2];
if (!pixel_traits<pixel_type>::has_alpha)
{
assign_pixel( t[n][m], p );
}
else
{
dlib::uint16 pa = v[m*2+1];
rgb_alpha_pixel pix;
assign_pixel(pix, p);
assign_pixel(pix.alpha, pa);
assign_pixel(t[n][m], pix);
}
}
}
}
else if (is_rgb() && bit_depth_ == 8) else if (is_rgb() && bit_depth_ == 8)
{ {
for ( unsigned n = 0; n < height_;n++ ) for ( unsigned n = 0; n < height_;n++ )
......
...@@ -75,7 +75,17 @@ namespace dlib ...@@ -75,7 +75,17 @@ namespace dlib
) const; ) const;
/*! /*!
ensures ensures
- if (this object contains a grayscale image) then - if (this object contains a grayscale image without an alpha channel) then
- returns true
- else
- returns false
!*/
bool is_graya(
) const;
/*!
ensures
- if (this object contains a grayscale image with an alpha channel) then
- returns true - returns true
- else - else
- returns false - returns false
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment