Let example/convert-to-nia speak PNG
diff --git a/example/convert-to-nia/convert-to-nia.c b/example/convert-to-nia/convert-to-nia.c
index 9aafc45..72f3f35 100644
--- a/example/convert-to-nia/convert-to-nia.c
+++ b/example/convert-to-nia/convert-to-nia.c
@@ -47,11 +47,16 @@
 // modules we use makes that process explicit. Preprocessing means that such
 // code simply isn't compiled.
 #define WUFFS_CONFIG__MODULES
+#define WUFFS_CONFIG__MODULE__ADLER32
 #define WUFFS_CONFIG__MODULE__BASE
 #define WUFFS_CONFIG__MODULE__BMP
+#define WUFFS_CONFIG__MODULE__CRC32
+#define WUFFS_CONFIG__MODULE__DEFLATE
 #define WUFFS_CONFIG__MODULE__GIF
 #define WUFFS_CONFIG__MODULE__LZW
+#define WUFFS_CONFIG__MODULE__PNG
 #define WUFFS_CONFIG__MODULE__WBMP
+#define WUFFS_CONFIG__MODULE__ZLIB
 
 // If building this program in an environment that doesn't easily accommodate
 // relative includes, you can use the script/inline-c-relative-includes.go
@@ -110,6 +115,7 @@
 
 wuffs_base__image_config g_image_config = {0};
 wuffs_base__frame_config g_frame_config = {0};
+int32_t g_fourcc = 0;
 uint32_t g_width = 0;
 uint32_t g_height = 0;
 
@@ -117,6 +123,7 @@
 union {
   wuffs_bmp__decoder bmp;
   wuffs_gif__decoder gif;
+  wuffs_png__decoder png;
   wuffs_wbmp__decoder wbmp;
 } g_potential_decoders;
 
@@ -222,23 +229,20 @@
 
 const char*  //
 load_image_type() {
-  while (g_src.meta.ri >= g_src.meta.wi) {
+  g_fourcc = 0;
+  while (true) {
+    g_fourcc = wuffs_base__magic_number_guess_fourcc(
+        wuffs_base__io_buffer__reader_slice(&g_src));
+    if ((g_fourcc >= 0) ||
+        (wuffs_base__io_buffer__reader_length(&g_src) == g_src.data.len)) {
+      break;
+    }
     TRY(read_more_src());
   }
 
   wuffs_base__status status;
-  switch (g_src_buffer_array[0]) {
-    case '\x00':
-      status = wuffs_wbmp__decoder__initialize(
-          &g_potential_decoders.wbmp, sizeof g_potential_decoders.wbmp,
-          WUFFS_VERSION, WUFFS_INITIALIZE__DEFAULT_OPTIONS);
-      TRY(wuffs_base__status__message(&status));
-      g_image_decoder =
-          wuffs_wbmp__decoder__upcast_as__wuffs_base__image_decoder(
-              &g_potential_decoders.wbmp);
-      break;
-
-    case 'B':
+  switch (g_fourcc) {
+    case WUFFS_BASE__FOURCC__BMP:
       status = wuffs_bmp__decoder__initialize(
           &g_potential_decoders.bmp, sizeof g_potential_decoders.bmp,
           WUFFS_VERSION, WUFFS_INITIALIZE__DEFAULT_OPTIONS);
@@ -246,9 +250,9 @@
       g_image_decoder =
           wuffs_bmp__decoder__upcast_as__wuffs_base__image_decoder(
               &g_potential_decoders.bmp);
-      break;
+      return NULL;
 
-    case 'G':
+    case WUFFS_BASE__FOURCC__GIF:
       status = wuffs_gif__decoder__initialize(
           &g_potential_decoders.gif, sizeof g_potential_decoders.gif,
           WUFFS_VERSION, WUFFS_INITIALIZE__DEFAULT_OPTIONS);
@@ -256,12 +260,29 @@
       g_image_decoder =
           wuffs_gif__decoder__upcast_as__wuffs_base__image_decoder(
               &g_potential_decoders.gif);
-      break;
+      return NULL;
 
-    default:
-      return "main: unrecognized file format";
+    case WUFFS_BASE__FOURCC__PNG:
+      status = wuffs_png__decoder__initialize(
+          &g_potential_decoders.png, sizeof g_potential_decoders.png,
+          WUFFS_VERSION, WUFFS_INITIALIZE__DEFAULT_OPTIONS);
+      TRY(wuffs_base__status__message(&status));
+      g_image_decoder =
+          wuffs_png__decoder__upcast_as__wuffs_base__image_decoder(
+              &g_potential_decoders.png);
+      return NULL;
+
+    case WUFFS_BASE__FOURCC__WBMP:
+      status = wuffs_wbmp__decoder__initialize(
+          &g_potential_decoders.wbmp, sizeof g_potential_decoders.wbmp,
+          WUFFS_VERSION, WUFFS_INITIALIZE__DEFAULT_OPTIONS);
+      TRY(wuffs_base__status__message(&status));
+      g_image_decoder =
+          wuffs_wbmp__decoder__upcast_as__wuffs_base__image_decoder(
+              &g_potential_decoders.wbmp);
+      return NULL;
   }
-  return NULL;
+  return "main: unsupported file format";
 }
 
 const char*  //