diff --git a/src/write.c b/src/write.c
index 0a7e1ea..8b33b0c 100644
--- a/src/write.c
+++ b/src/write.c
@@ -771,7 +771,14 @@
 // Same as avifImageCopy() but pads the dstImage with border pixel values to reach dstWidth and dstHeight.
 static avifImage * avifImageCopyAndPad(const avifImage * srcImage, uint32_t dstWidth, uint32_t dstHeight)
 {
-    avifImage * dstImage = avifImageCreate(dstWidth, dstHeight, srcImage->depth, srcImage->yuvFormat);
+    avifImage * dstImage = avifImageCreateEmpty();
+    // Copy all fields but do not allocate.
+    if (avifImageCopy(dstImage, srcImage, (avifPlanesFlag)0) != AVIF_RESULT_OK) {
+        avifImageDestroy(dstImage);
+        return NULL;
+    }
+    dstImage->width = dstWidth;
+    dstImage->height = dstHeight;
 
     if (srcImage->yuvPlanes[AVIF_CHAN_Y]) {
         const avifResult allocationResult = avifImageAllocatePlanes(dstImage, AVIF_PLANES_YUV);
diff --git a/tests/gtest/avifgridapitest.cc b/tests/gtest/avifgridapitest.cc
index 3cc4f82..705382e 100644
--- a/tests/gtest/avifgridapitest.cc
+++ b/tests/gtest/avifgridapitest.cc
@@ -241,5 +241,51 @@
             AVIF_RESULT_INVALID_IMAGE_GRID);
 }
 
+//------------------------------------------------------------------------------
+
+TEST(GridApiTest, SameMatrixCoefficients) {
+  testutil::AvifImagePtr cell_0 = testutil::CreateImage(
+      64, 64, /*depth=*/8, AVIF_PIXEL_FORMAT_YUV444, AVIF_PLANES_ALL);
+  testutil::AvifImagePtr cell_1 = testutil::CreateImage(
+      1, 64, /*depth=*/8, AVIF_PIXEL_FORMAT_YUV444, AVIF_PLANES_ALL);
+
+  // All input cells have the same non-default properties.
+  cell_0->matrixCoefficients = AVIF_MATRIX_COEFFICIENTS_BT601;
+  cell_1->matrixCoefficients = AVIF_MATRIX_COEFFICIENTS_BT601;
+
+  testutil::AvifEncoderPtr encoder(avifEncoderCreate(), avifEncoderDestroy);
+  ASSERT_NE(encoder, nullptr);
+  encoder->speed = AVIF_SPEED_FASTEST;
+  const avifImage* cell_image_ptrs[2] = {cell_0.get(), cell_1.get()};
+  ASSERT_EQ(
+      avifEncoderAddImageGrid(encoder.get(), /*gridCols=*/2, /*gridRows=*/1,
+                              cell_image_ptrs, AVIF_ADD_IMAGE_FLAG_SINGLE),
+      AVIF_RESULT_OK);
+  testutil::AvifRwData encoded_avif;
+  ASSERT_EQ(avifEncoderFinish(encoder.get(), &encoded_avif), AVIF_RESULT_OK);
+  ASSERT_NE(testutil::Decode(encoded_avif.data, encoded_avif.size), nullptr);
+}
+
+TEST(GridApiTest, DifferentMatrixCoefficients) {
+  testutil::AvifImagePtr cell_0 = testutil::CreateImage(
+      64, 64, /*depth=*/8, AVIF_PIXEL_FORMAT_YUV444, AVIF_PLANES_ALL);
+  testutil::AvifImagePtr cell_1 = testutil::CreateImage(
+      1, 64, /*depth=*/8, AVIF_PIXEL_FORMAT_YUV444, AVIF_PLANES_ALL);
+
+  // Some input cells have different properties.
+  cell_0->matrixCoefficients = AVIF_MATRIX_COEFFICIENTS_BT601;
+  cell_1->matrixCoefficients = AVIF_MATRIX_COEFFICIENTS_UNSPECIFIED;
+
+  testutil::AvifEncoderPtr encoder(avifEncoderCreate(), avifEncoderDestroy);
+  ASSERT_NE(encoder, nullptr);
+  encoder->speed = AVIF_SPEED_FASTEST;
+  // Encoding should fail.
+  const avifImage* cell_image_ptrs[2] = {cell_0.get(), cell_1.get()};
+  ASSERT_EQ(
+      avifEncoderAddImageGrid(encoder.get(), /*gridCols=*/2, /*gridRows=*/1,
+                              cell_image_ptrs, AVIF_ADD_IMAGE_FLAG_SINGLE),
+      AVIF_RESULT_INVALID_IMAGE_GRID);
+}
+
 }  // namespace
 }  // namespace libavif
