[devel] Use the old scaling method for background if png_set_chop_16() was

called.
diff --git a/ANNOUNCE b/ANNOUNCE
index a3cd3de..af13e24 100644
--- a/ANNOUNCE
+++ b/ANNOUNCE
@@ -198,6 +198,8 @@
   Added png_set_chop_16() API, to match inaccurate results from previous
     libpng versions.
   Removed the ACCURATE and LEGACY options (they are no longer useable)
+  Use the old scaling method for background if png_set_chop_16() was
+    called.
 
 Send comments/corrections/commendations to png-mng-implement at lists.sf.net:
 (subscription required; visit
diff --git a/CHANGES b/CHANGES
index b77e43d..0d4e02b 100644
--- a/CHANGES
+++ b/CHANGES
@@ -3461,6 +3461,8 @@
   Added png_set_chop_16() API, to match inaccurate results from previous
     libpng versions.
   Removed the ACCURATE and LEGACY options (they are no longer useable)
+  Use the old scaling method for background if png_set_chop_16() was
+    called.
 
 Send comments/corrections/commendations to png-mng-implement at lists.sf.net
 (subscription required; visit
diff --git a/pngrtran.c b/pngrtran.c
index 488e7cd..01f5463 100644
--- a/pngrtran.c
+++ b/pngrtran.c
@@ -1453,12 +1453,25 @@
        * The PNG_BACKGROUND_EXPAND code above does not expand to 16 bits at
        * present, so that case is ok (until do_expand_16 is moved.)
        */
+
+      if (png_ptr->transformations & PNG_CHOP_16_TO_8)
+      {
 #     define CHOP(x) (x)=((png_uint_16)(((png_uint_32)(x)*255+32895) >> 16))
       CHOP(png_ptr->background.red);
       CHOP(png_ptr->background.green);
       CHOP(png_ptr->background.blue);
       CHOP(png_ptr->background.gray);
 #     undef CHOP
+      }
+      else /* Use pre-libpng-1.5.4 inaccurate "ACCURATE" scaling */
+      {
+#     define CHOP(x) ((png_uint_16)((2*(png_uint_32)(x) + 257)/514))
+      CHOP(png_ptr->background.red);
+      CHOP(png_ptr->background.green);
+      CHOP(png_ptr->background.blue);
+      CHOP(png_ptr->background.gray);
+#     undef CHOP
+      }
    }
 #endif