diff options
author | Matt Sarett <msarett@google.com> | 2017-05-12 11:41:27 -0400 |
---|---|---|
committer | Skia Commit-Bot <skia-commit-bot@chromium.org> | 2017-05-12 16:48:17 +0000 |
commit | ebb1b5c297e394ab19f99d807095672b7f5d8aef (patch) | |
tree | 5f2fcd7f15da445df1efd5861b708df8f35c5ba0 /gm/image_pict.cpp | |
parent | 7c8460e10135c05a42d0744b84838bbc24398ac2 (diff) |
Add new SkImageGenerator::getPixels() API, deprecate the old
This is fairly aggressive in that it will break any client
that is currently using SkImageGenerator with kIndex8.
I'm guessing that we don't have any clients doing that.
Bug: skia:6620
Change-Id: Ifd16f5232bb3a9f759c225315c57492d917ed9ca
Reviewed-on: https://skia-review.googlesource.com/16601
Commit-Queue: Matt Sarett <msarett@google.com>
Reviewed-by: Mike Reed <reed@google.com>
Diffstat (limited to 'gm/image_pict.cpp')
-rw-r--r-- | gm/image_pict.cpp | 72 |
1 files changed, 2 insertions, 70 deletions
diff --git a/gm/image_pict.cpp b/gm/image_pict.cpp index 16ee896bfa..fa4c726633 100644 --- a/gm/image_pict.cpp +++ b/gm/image_pict.cpp @@ -124,30 +124,10 @@ public: protected: bool onGetPixels(const SkImageInfo& info, void* pixels, size_t rowBytes, - SkPMColor* ctable, int* ctableCount) override { + const Options&) override { SkASSERT(fBM.width() == info.width()); SkASSERT(fBM.height() == info.height()); - - if (info.colorType() == kIndex_8_SkColorType) { - if (SkColorTable* ct = fBM.getColorTable()) { - if (ctable) { - memcpy(ctable, ct->readColors(), ct->count() * sizeof(SkPMColor)); - } - if (ctableCount) { - *ctableCount = ct->count(); - } - - for (int y = 0; y < info.height(); ++y) { - memcpy(pixels, fBM.getAddr8(0, y), fBM.width()); - pixels = (char*)pixels + rowBytes; - } - return true; - } else { - return false; - } - } else { - return fBM.readPixels(info, pixels, rowBytes, 0, 0); - } + return fBM.readPixels(info, pixels, rowBytes, 0, 0); } private: SkBitmap fBM; @@ -162,53 +142,6 @@ static std::unique_ptr<SkImageGenerator> make_ras_generator(GrContext*, sk_sp<Sk return skstd::make_unique<RasterGenerator>(bm); } -// so we can create a color-table -static int find_closest(SkPMColor c, const SkPMColor table[], int count) { - const int cr = SkGetPackedR32(c); - const int cg = SkGetPackedG32(c); - const int cb = SkGetPackedB32(c); - - int minDist = 999999999; - int index = 0; - for (int i = 0; i < count; ++i) { - int dr = SkAbs32((int)SkGetPackedR32(table[i]) - cr); - int dg = SkAbs32((int)SkGetPackedG32(table[i]) - cg); - int db = SkAbs32((int)SkGetPackedB32(table[i]) - cb); - int dist = dr + dg + db; - if (dist < minDist) { - minDist = dist; - index = i; - } - } - return index; -} - -static std::unique_ptr<SkImageGenerator> make_ctable_generator(GrContext*, sk_sp<SkPicture> pic) { - SkBitmap bm; - bm.allocN32Pixels(100, 100); - SkCanvas canvas(bm); - canvas.clear(0); - canvas.translate(-100, -100); - canvas.drawPicture(pic); - - const SkPMColor colors[] = { - SkPreMultiplyColor(SK_ColorRED), - SkPreMultiplyColor(0), - SkPreMultiplyColor(SK_ColorBLUE), - }; - const int count = SK_ARRAY_COUNT(colors); - SkImageInfo info = SkImageInfo::Make(100, 100, kIndex_8_SkColorType, kPremul_SkAlphaType); - - SkBitmap bm2; - bm2.allocPixels(info, SkColorTable::Make(colors, count)); - for (int y = 0; y < info.height(); ++y) { - for (int x = 0; x < info.width(); ++x) { - *bm2.getAddr8(x, y) = find_closest(*bm.getAddr32(x, y), colors, count); - } - } - return skstd::make_unique<RasterGenerator>(bm2); -} - class EmptyGenerator : public SkImageGenerator { public: EmptyGenerator(const SkImageInfo& info) : SkImageGenerator(info) {} @@ -399,7 +332,6 @@ private: }; DEF_GM( return new ImageCacheratorGM("picture", make_pic_generator); ) DEF_GM( return new ImageCacheratorGM("raster", make_ras_generator); ) -DEF_GM( return new ImageCacheratorGM("ctable", make_ctable_generator); ) #if SK_SUPPORT_GPU DEF_GM( return new ImageCacheratorGM("texture", make_tex_generator); ) #endif |