aboutsummaryrefslogtreecommitdiffhomepage
path: root/tools/skimage_main.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tools/skimage_main.cpp')
-rw-r--r--tools/skimage_main.cpp17
1 files changed, 15 insertions, 2 deletions
diff --git a/tools/skimage_main.cpp b/tools/skimage_main.cpp
index d98a6191c3..0d60f8afe9 100644
--- a/tools/skimage_main.cpp
+++ b/tools/skimage_main.cpp
@@ -111,7 +111,19 @@ static SkBitmap::Config gPrefConfig(SkBitmap::kNo_Config);
SkAutoTUnref<skiagm::JsonExpectationsSource> gJsonExpectations;
static bool write_bitmap(const char outName[], const SkBitmap& bm) {
- return SkImageEncoder::EncodeFile(outName, bm, SkImageEncoder::kPNG_Type, 100);
+ const SkBitmap* bmPtr;
+ 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;
+ }
+ return SkImageEncoder::EncodeFile(outName, *bmPtr, SkImageEncoder::kPNG_Type, 100);
}
/**
@@ -495,7 +507,8 @@ static void decodeFileAndWrite(const char srcPath[], const SkString* writePath)
}
}
- if (FLAGS_reencode) {
+ // Do not attempt to re-encode A8, since our image encoders do not support encoding to A8.
+ if (FLAGS_reencode && bitmap.config() != SkBitmap::kA8_Config) {
// Encode to the format the file was originally in, or PNG if the encoder for the same
// format is unavailable.
SkImageDecoder::Format format = codec->getFormat();