aboutsummaryrefslogtreecommitdiffhomepage
path: root/tools
diff options
context:
space:
mode:
authorGravatar Matt Sarett <msarett@google.com>2017-04-27 12:45:45 -0400
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2017-04-27 17:18:03 +0000
commitd4a338f4d0a0cdc08d7d3668931c60997f0fa971 (patch)
tree676fe5dcd3d19c14c5bf091243cadea35ebef205 /tools
parent9fa99614ec4e695f6e7e9fe19508758757543b8c (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.cpp4
-rw-r--r--tools/picture_utils.cpp2
-rw-r--r--tools/sk_tool_utils.cpp38
-rw-r--r--tools/sk_tool_utils.h1
-rw-r--r--tools/skdiff/skdiff_utils.cpp2
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(&copy, kN32_SkColorType);
+ sk_tool_utils::copy_to(&copy, kN32_SkColorType, bitmap);
force_all_opaque(copy);
return sk_tool_utils::EncodeImageToFile(path.c_str(), copy,
SkEncodedImageFormat::kPNG, 100);