Fixed a bug in the png_loader. If you loaded an image with an

alpha channel into something without an alpha channel there were
uninitialized values being alpha blended into the image.
This commit is contained in:
Davis King 2011-08-25 20:30:54 -04:00
parent ba08e28386
commit f7c9763ab0
2 changed files with 18 additions and 0 deletions

View File

@ -100,6 +100,9 @@ namespace dlib
}
else if (is_rgba() && bit_depth_ == 8)
{
if (!pixel_traits<typename T::type>::has_alpha)
assign_all_pixels(t,0);
for ( unsigned n = 0; n < height_;n++ )
{
const unsigned char* v = get_row( n );
@ -116,6 +119,9 @@ namespace dlib
}
else if (is_rgba() && bit_depth_ == 16)
{
if (!pixel_traits<typename T::type>::has_alpha)
assign_all_pixels(t,0);
for ( unsigned n = 0; n < height_;n++ )
{
const uint16* v = (uint16*)get_row( n );

View File

@ -166,7 +166,10 @@ namespace
#ifdef DLIB_PNG_SUPPORT
{
array2d<rgb_alpha_pixel> img;
array2d<rgb_pixel> img2, img3;
img.set_size(14,15);
img2.set_size(img.nr(),img.nc());
img3.set_size(img.nr(),img.nc());
for (long r = 0; r < 14; ++r)
{
for (long c = 0; c < 15; ++c)
@ -189,6 +192,11 @@ namespace
DLIB_TEST(img.nr() == 14);
DLIB_TEST(img.nc() == 15);
assign_all_pixels(img2, 255);
assign_all_pixels(img3, 0);
load_png(img2, "test.png");
assign_image(img3, img);
for (long r = 0; r < 14; ++r)
{
for (long c = 0; c < 15; ++c)
@ -197,6 +205,10 @@ namespace
DLIB_TEST(img[r][c].green == r*14 + c + 2);
DLIB_TEST(img[r][c].blue == r*14 + c + 3);
DLIB_TEST(img[r][c].alpha == r*14 + c + 4);
DLIB_TEST(img2[r][c].red == img3[r][c].red);
DLIB_TEST(img2[r][c].green == img3[r][c].green);
DLIB_TEST(img2[r][c].blue == img3[r][c].blue);
}
}
}