In skimage, copy to 8888 if encoding fails.
authorscroggo@google.com <scroggo@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81>
Mon, 7 Oct 2013 16:56:01 +0000 (16:56 +0000)
committerscroggo@google.com <scroggo@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81>
Mon, 7 Oct 2013 16:56:01 +0000 (16:56 +0000)
When writing the bitmap for visual comparison, rather than special
casing A8, depend on the fact that the encoder will fail, and try
copying to 8888 and encoding that if so.

R=reed@google.com

Review URL: https://codereview.chromium.org/25964003

git-svn-id: http://skia.googlecode.com/svn/trunk@11633 2bbb7eff-a529-9590-31e7-b0007b416f81

tools/skimage_main.cpp

index 0d60f8a..11aeb76 100644 (file)
@@ -111,19 +111,22 @@ static SkBitmap::Config gPrefConfig(SkBitmap::kNo_Config);
 SkAutoTUnref<skiagm::JsonExpectationsSource> gJsonExpectations;
 
 static bool write_bitmap(const char outName[], const SkBitmap& bm) {
-    const SkBitmap* bmPtr;
+    if (SkImageEncoder::EncodeFile(outName, bm, SkImageEncoder::kPNG_Type, 100)) {
+        return true;
+    }
+
+    if (bm.config() == SkBitmap::kARGB_8888_Config) {
+        // First attempt at encoding failed, and the bitmap was already 8888. Making
+        // a copy is not going to help.
+        return false;
+    }
+
+    // Encoding failed. Copy to 8888 and try again.
     SkBitmap bm8888;
-    if (bm.config() == SkBitmap::kA8_Config) {
-        // Copy A8 into ARGB_8888, since our image encoders do not currently
-        // support A8.
-        if (!bm.copyTo(&bm8888, SkBitmap::kARGB_8888_Config)) {
-            return false;
-        }
-        bmPtr = &bm8888;
-    } else {
-        bmPtr = &bm;
+    if (!bm.copyTo(&bm8888, SkBitmap::kARGB_8888_Config)) {
+        return false;
     }
-    return SkImageEncoder::EncodeFile(outName, *bmPtr, SkImageEncoder::kPNG_Type, 100);
+    return SkImageEncoder::EncodeFile(outName, bm8888, SkImageEncoder::kPNG_Type, 100);
 }
 
 /**