diff --git a/include/mapnik/hextree.hpp b/include/mapnik/hextree.hpp index d9d3fe71b..868784270 100644 --- a/include/mapnik/hextree.hpp +++ b/include/mapnik/hextree.hpp @@ -393,7 +393,7 @@ private: // clip extreme alfa values void create_palette_rek(std::vector & palette, node * itr) const { - if (itr->count >= 3) + if (itr->count != 0) { unsigned count = itr->count; byte a = byte(itr->alphas/float(count)); diff --git a/include/mapnik/png_io.hpp b/include/mapnik/png_io.hpp index 7034ca293..88821eb87 100644 --- a/include/mapnik/png_io.hpp +++ b/include/mapnik/png_io.hpp @@ -541,7 +541,7 @@ void save_as_png8_oct(T1 & file, trees[j].create_palette(pal); leftovers = cols[j] - static_cast(pal.size()); cols[j] = static_cast(pal.size()); - palette.insert(palette.begin(), pal.begin(), pal.end()); + palette.insert(palette.end(), pal.begin(), pal.end()); } } diff --git a/tests/python_tests/images/support/encoding-opts/png8-17cols.png b/tests/python_tests/images/support/encoding-opts/png8-17cols.png new file mode 100644 index 000000000..22f4c3542 Binary files /dev/null and b/tests/python_tests/images/support/encoding-opts/png8-17cols.png differ diff --git a/tests/python_tests/images/support/encoding-opts/png8-2px.A.png b/tests/python_tests/images/support/encoding-opts/png8-2px.A.png new file mode 100644 index 000000000..f047b0804 Binary files /dev/null and b/tests/python_tests/images/support/encoding-opts/png8-2px.A.png differ diff --git a/tests/python_tests/images/support/encoding-opts/png8-2px.png b/tests/python_tests/images/support/encoding-opts/png8-2px.png new file mode 100644 index 000000000..f047b0804 Binary files /dev/null and b/tests/python_tests/images/support/encoding-opts/png8-2px.png differ diff --git a/tests/python_tests/images/support/encoding-opts/png8-9cols.png b/tests/python_tests/images/support/encoding-opts/png8-9cols.png new file mode 100644 index 000000000..a781b37a2 Binary files /dev/null and b/tests/python_tests/images/support/encoding-opts/png8-9cols.png differ diff --git a/tests/python_tests/png_encoding_test.py b/tests/python_tests/png_encoding_test.py index 4919cc255..0b93928e8 100644 --- a/tests/python_tests/png_encoding_test.py +++ b/tests/python_tests/png_encoding_test.py @@ -157,6 +157,62 @@ if mapnik.has_png(): eq_(len(im.tostring('png8:t=0')) == len(im_in.tostring('png8')), True) eq_(len(im.tostring('png8:t=0:m=o')) == len(im_in.tostring('png8:m=o')), True) + def test_9_colors_hextree(): + expected = './images/support/encoding-opts/png8-9cols.png' + im = mapnik.Image.open(expected) + t0 = tmp_dir + 'png-encoding-9-colors.result-hextree.png' + im.save(t0, 'png8:m=h') + eq_(mapnik.Image.open(t0).tostring(), + mapnik.Image.open(expected).tostring(), + '%s (actual) not == to %s (expected)' % (t0, expected)) + + def test_9_colors_octree(): + expected = './images/support/encoding-opts/png8-9cols.png' + im = mapnik.Image.open(expected) + t0 = tmp_dir + 'png-encoding-9-colors.result-octree.png' + im.save(t0, 'png8:m=o') + eq_(mapnik.Image.open(t0).tostring(), + mapnik.Image.open(expected).tostring(), + '%s (actual) not == to %s (expected)' % (t0, expected)) + + def test_17_colors_hextree(): + expected = './images/support/encoding-opts/png8-17cols.png' + im = mapnik.Image.open(expected) + t0 = tmp_dir + 'png-encoding-17-colors.result-hextree.png' + im.save(t0, 'png8:m=h') + eq_(mapnik.Image.open(t0).tostring(), + mapnik.Image.open(expected).tostring(), + '%s (actual) not == to %s (expected)' % (t0, expected)) + + def test_17_colors_octree(): + expected = './images/support/encoding-opts/png8-17cols.png' + im = mapnik.Image.open(expected) + t0 = tmp_dir + 'png-encoding-17-colors.result-octree.png' + im.save(t0, 'png8:m=o') + eq_(mapnik.Image.open(t0).tostring(), + mapnik.Image.open(expected).tostring(), + '%s (actual) not == to %s (expected)' % (t0, expected)) + + def test_2px_regression_hextree(): + im = mapnik.Image.open('./images/support/encoding-opts/png8-2px.A.png') + expected = './images/support/encoding-opts/png8-2px.png' + + t0 = tmp_dir + 'png-encoding-2px.result-hextree.png' + im.save(t0, 'png8:m=h') + eq_(mapnik.Image.open(t0).tostring(), + mapnik.Image.open(expected).tostring(), + '%s (actual) not == to %s (expected)' % (t0, expected)) + + def test_2px_regression_octree(): + im = mapnik.Image.open('./images/support/encoding-opts/png8-2px.A.png') + expected = './images/support/encoding-opts/png8-2px.png' + t0 = tmp_dir + 'png-encoding-2px.result-octree.png' + im.save(t0, 'png8:m=o') + eq_(mapnik.Image.open(t0).tostring(), + mapnik.Image.open(expected).tostring(), + '%s (actual) not == to %s (expected)' % (t0, expected)) + + if __name__ == "__main__": setup() exit(run_all(eval(x) for x in dir() if x.startswith("test_")))