diff options
author | Matt Sarett <msarett@google.com> | 2017-04-27 12:45:45 -0400 |
---|---|---|
committer | Skia Commit-Bot <skia-commit-bot@chromium.org> | 2017-04-27 17:18:03 +0000 |
commit | d4a338f4d0a0cdc08d7d3668931c60997f0fa971 (patch) | |
tree | 676fe5dcd3d19c14c5bf091243cadea35ebef205 /tools | |
parent | 9fa99614ec4e695f6e7e9fe19508758757543b8c (diff) |
Delete copyTo(Allocator), hide copyTo() behind flag
Replace uses of copyTo() in Skia.
Bug: skia:6464
Change-Id: I921dc53a1c29a5176d18f05741f7c0b5a008e548
Reviewed-on: https://skia-review.googlesource.com/14502
Commit-Queue: Matt Sarett <msarett@google.com>
Reviewed-by: Mike Reed <reed@google.com>
Diffstat (limited to 'tools')
-rw-r--r-- | tools/debugger/SkDrawCommand.cpp | 4 | ||||
-rw-r--r-- | tools/picture_utils.cpp | 2 | ||||
-rw-r--r-- | tools/sk_tool_utils.cpp | 38 | ||||
-rw-r--r-- | tools/sk_tool_utils.h | 1 | ||||
-rw-r--r-- | tools/skdiff/skdiff_utils.cpp | 2 |
5 files changed, 44 insertions, 3 deletions
diff --git a/tools/debugger/SkDrawCommand.cpp b/tools/debugger/SkDrawCommand.cpp index e386f46f22..23cc6b21f8 100644 --- a/tools/debugger/SkDrawCommand.cpp +++ b/tools/debugger/SkDrawCommand.cpp @@ -837,7 +837,9 @@ static SkBitmap* convert_colortype(SkBitmap* bitmap, SkColorType colorType) { return bitmap; } SkBitmap* dst = new SkBitmap(); - if (bitmap->copyTo(dst, colorType)) { + if (dst->tryAllocPixels(bitmap->info().makeColorType(colorType)) && + bitmap->readPixels(dst->info(), dst->getPixels(), dst->rowBytes(), 0, 0)) + { delete bitmap; return dst; } diff --git a/tools/picture_utils.cpp b/tools/picture_utils.cpp index 27e91ccdeb..bd32f1938e 100644 --- a/tools/picture_utils.cpp +++ b/tools/picture_utils.cpp @@ -126,7 +126,7 @@ namespace sk_tools { // Convert smaller formats up to premul linear 8-bit (in SkPMColor order). if (bitmap.colorType() != kN32_SkColorType) { SkBitmap n32; - if (!bitmap.copyTo(&n32, kN32_SkColorType)) { + if (!sk_tool_utils::copy_to(&n32, kN32_SkColorType, bitmap)) { return nullptr; } bitmap = n32; diff --git a/tools/sk_tool_utils.cpp b/tools/sk_tool_utils.cpp index 9a4bb2ba8c..c69b17d720 100644 --- a/tools/sk_tool_utils.cpp +++ b/tools/sk_tool_utils.cpp @@ -586,6 +586,44 @@ SkRect compute_tallest_occluder(const SkRRect& rr) { return SkRect::MakeLTRB(r.fLeft + maxL, r.fTop, r.fRight - maxR, r.fBottom); } +bool copy_to(SkBitmap* dst, SkColorType dstColorType, const SkBitmap& src) { + SkPixmap srcPM; + if (!src.peekPixels(&srcPM)) { + return false; + } + + SkBitmap tmpDst; + SkImageInfo dstInfo = srcPM.info().makeColorType(dstColorType); + if (!tmpDst.setInfo(dstInfo)) { + return false; + } + + // allocate colortable if srcConfig == kIndex8_Config + sk_sp<SkColorTable> ctable = nullptr; + if (dstColorType == kIndex_8_SkColorType) { + if (src.colorType() != kIndex_8_SkColorType) { + return false; + } + + ctable = sk_ref_sp(srcPM.ctable()); + } + if (!tmpDst.tryAllocPixels(ctable.get())) { + return false; + } + + SkPixmap dstPM; + if (!tmpDst.peekPixels(&dstPM)) { + return false; + } + + if (!srcPM.readPixels(dstPM)) { + return false; + } + + dst->swap(tmpDst); + return true; +} + void copy_to_g8(SkBitmap* dst, const SkBitmap& src) { SkASSERT(kBGRA_8888_SkColorType == src.colorType() || kRGBA_8888_SkColorType == src.colorType()); diff --git a/tools/sk_tool_utils.h b/tools/sk_tool_utils.h index e319411349..111f966983 100644 --- a/tools/sk_tool_utils.h +++ b/tools/sk_tool_utils.h @@ -253,6 +253,7 @@ namespace sk_tool_utils { return sk_make_sp<EncodeImagePixelSerializer>(); } + bool copy_to(SkBitmap* dst, SkColorType dstCT, const SkBitmap& src); void copy_to_g8(SkBitmap* dst, const SkBitmap& src); #if SK_SUPPORT_GPU diff --git a/tools/skdiff/skdiff_utils.cpp b/tools/skdiff/skdiff_utils.cpp index 05e1c50388..7a1b7e88a4 100644 --- a/tools/skdiff/skdiff_utils.cpp +++ b/tools/skdiff/skdiff_utils.cpp @@ -80,7 +80,7 @@ static void force_all_opaque(const SkBitmap& bitmap) { bool write_bitmap(const SkString& path, const SkBitmap& bitmap) { SkBitmap copy; - bitmap.copyTo(©, kN32_SkColorType); + sk_tool_utils::copy_to(©, kN32_SkColorType, bitmap); force_all_opaque(copy); return sk_tool_utils::EncodeImageToFile(path.c_str(), copy, SkEncodedImageFormat::kPNG, 100); |