Don't delete gain map metadata if ignore_gain_map

In avif::ReadImage(), if ignore_gain_map is true, don't delete gain map
metadata. Let the caller do that.
diff --git a/apps/avifgainmaputil/combine_command.cc b/apps/avifgainmaputil/combine_command.cc
index 97925f9..420a193 100644
--- a/apps/avifgainmaputil/combine_command.cc
+++ b/apps/avifgainmaputil/combine_command.cc
@@ -135,9 +135,12 @@
             << gain_map_height << "\n";
 
   // Because base_image is read with ignore_gain_map=true, there is no
-  // preexisting gain map. Otherwise, overwriting the pointer would cause a
-  // memory leak.
-  assert(base_image->gainMap == nullptr);
+  // preexisting gain map but there may be preexisting gain map metadata.
+  if (base_image->gainMap) {
+    assert(base_image->gainMap->image == nullptr);
+    avifGainMapDestroy(base_image->gainMap);
+    base_image->gainMap = nullptr;
+  }
   base_image->gainMap = avifGainMapCreate();
   base_image->gainMap->image =
       avifImageCreate(gain_map_width, gain_map_height, arg_gain_map_depth_,
diff --git a/apps/avifgainmaputil/imageio.cc b/apps/avifgainmaputil/imageio.cc
index 7aae803..25a1b49 100644
--- a/apps/avifgainmaputil/imageio.cc
+++ b/apps/avifgainmaputil/imageio.cc
@@ -214,8 +214,10 @@
     if (!view) {
       return AVIF_RESULT_OUT_OF_MEMORY;
     }
+    // When ignore_gain_map is true, decoder->image won't have a gain map but
+    // may have gain map metadata. It is fine to copy gain map metadata.
     result = avifImageCreateView(view.get(), decoder->image, ignore_profile,
-                                 ignore_alpha, ignore_gain_map);
+                                 ignore_alpha, /*ignoreGainMap=*/false);
     if (result != AVIF_RESULT_OK) {
       return result;
     }