drawBitmap is deprecated, use drawImage
Change-Id: Ib66517fe26036704ccb8328ef92fa0f5240c79f4
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/358222
Reviewed-by: Mike Reed <reed@google.com>
Commit-Queue: Mike Reed <reed@google.com>
diff --git a/gm/bitmapshader.cpp b/gm/bitmapshader.cpp
index 56e034a..cbf153a 100644
--- a/gm/bitmapshader.cpp
+++ b/gm/bitmapshader.cpp
@@ -24,26 +24,26 @@
namespace skiagm {
-static void draw_bm(SkBitmap* bm) {
+static sk_sp<SkImage> draw_bm() {
SkPaint bluePaint;
bluePaint.setColor(SK_ColorBLUE);
- bm->allocN32Pixels(20, 20);
- bm->eraseColor(SK_ColorRED);
-
- SkCanvas canvas(*bm);
- canvas.drawCircle(10, 10, 5, bluePaint);
+ SkBitmap bm;
+ bm.allocN32Pixels(20, 20);
+ bm.eraseColor(SK_ColorRED);
+ SkCanvas(bm).drawCircle(10, 10, 5, bluePaint);
+ return bm.asImage();
}
-static void draw_mask(SkBitmap* bm) {
+static sk_sp<SkImage> draw_mask() {
SkPaint circlePaint;
circlePaint.setColor(SK_ColorBLACK);
- bm->allocPixels(SkImageInfo::MakeA8(20, 20));
- bm->eraseColor(SK_ColorTRANSPARENT);
-
- SkCanvas canvas(*bm);
- canvas.drawCircle(10, 10, 10, circlePaint);
+ SkBitmap bm;
+ bm.allocPixels(SkImageInfo::MakeA8(20, 20));
+ bm.eraseColor(SK_ColorTRANSPARENT);
+ SkCanvas(bm).drawCircle(10, 10, 10, circlePaint);
+ return bm.asImage();
}
class BitmapShaderGM : public GM {
@@ -51,8 +51,8 @@
protected:
void onOnceBeforeDraw() override {
this->setBGColor(SK_ColorGRAY);
- draw_bm(&fBitmap);
- draw_mask(&fMask);
+ fImage = draw_bm();
+ fMask = draw_mask();
}
SkString onShortName() override {
@@ -75,12 +75,12 @@
}
canvas->save();
- paint.setShader(fBitmap.makeShader(SkSamplingOptions(), s));
+ paint.setShader(fImage->makeShader(SkSamplingOptions(), s));
// draw the shader with a bitmap mask
- canvas->drawBitmap(fMask, 0, 0, &paint);
+ canvas->drawImage(fMask, 0, 0, SkSamplingOptions(), &paint);
// no blue circle expected (the bitmap shader's coordinates are aligned to CTM still)
- canvas->drawBitmap(fMask, 30, 0, &paint);
+ canvas->drawImage(fMask, 30, 0, SkSamplingOptions(), &paint);
canvas->translate(0, 25);
@@ -92,13 +92,13 @@
// clear the shader, colorized by a solid color with a bitmap mask
paint.setShader(nullptr);
paint.setColor(SK_ColorGREEN);
- canvas->drawBitmap(fMask, 0, 0, &paint);
- canvas->drawBitmap(fMask, 30, 0, &paint);
+ canvas->drawImage(fMask, 0, 0, SkSamplingOptions(), &paint);
+ canvas->drawImage(fMask, 30, 0, SkSamplingOptions(), &paint);
canvas->translate(0, 25);
- paint.setShader(fMask.makeShader(SkTileMode::kRepeat, SkTileMode::kRepeat,
- SkSamplingOptions(), s));
+ paint.setShader(fMask->makeShader(SkTileMode::kRepeat, SkTileMode::kRepeat,
+ SkSamplingOptions(), s));
paint.setColor(SK_ColorRED);
// draw the mask using the shader and a color
@@ -110,8 +110,7 @@
}
private:
- SkBitmap fBitmap;
- SkBitmap fMask;
+ sk_sp<SkImage> fImage, fMask;
using INHERITED = GM;
};
diff --git a/gm/bitmaptiled.cpp b/gm/bitmaptiled.cpp
index 1dd6ab6..40b498d 100644
--- a/gm/bitmaptiled.cpp
+++ b/gm/bitmaptiled.cpp
@@ -50,13 +50,17 @@
for (int i = 0; i < 10; ++i) {
float offset = i * 0.1f;
if (vertical) {
- canvas->drawBitmapRect(bmp, SkRect::MakeXYWH(0.0f, (kTileSize - 50) + offset,
- 32.0f, 1124.0f),
- SkRect::MakeXYWH(37.0f * i, 0.0f, 32.0f, 1124.0f), nullptr);
+ canvas->drawImageRect(bmp.asImage(),
+ SkRect::MakeXYWH(0, (kTileSize - 50) + offset, 32, 1124.0f),
+ SkRect::MakeXYWH(37.0f * i, 0.0f, 32.0f, 1124.0f),
+ SkSamplingOptions(), nullptr,
+ SkCanvas::kStrict_SrcRectConstraint);
} else {
- canvas->drawBitmapRect(bmp, SkRect::MakeXYWH((kTileSize - 50) + offset, 0.0f,
- 1124.0f, 32.0f),
- SkRect::MakeXYWH(0.0f, 37.0f * i, 1124.0f, 32.0f), nullptr);
+ canvas->drawImageRect(bmp.asImage(),
+ SkRect::MakeXYWH((kTileSize - 50) + offset, 0, 1124, 32),
+ SkRect::MakeXYWH(0.0f, 37.0f * i, 1124.0f, 32.0f),
+ SkSamplingOptions(), nullptr,
+ SkCanvas::kStrict_SrcRectConstraint);
}
}
}
diff --git a/gm/blurrect.cpp b/gm/blurrect.cpp
index 9cb1e42..ee8aafd 100644
--- a/gm/blurrect.cpp
+++ b/gm/blurrect.cpp
@@ -232,7 +232,7 @@
canvas->save();
canvas->translate((SkScalar)cur_x, (SkScalar)cur_y);
canvas->translate(-(bm.width() - r.width())/2, -(bm.height()-r.height())/2);
- canvas->drawBitmap(bm, 0.f, 0.f, nullptr);
+ canvas->drawImage(bm.asImage(), 0.f, 0.f);
canvas->restore();
cur_x += bm.width() + fPadding;
diff --git a/gm/convexpolyclip.cpp b/gm/convexpolyclip.cpp
index 0953ee7..f46104e 100644
--- a/gm/convexpolyclip.cpp
+++ b/gm/convexpolyclip.cpp
@@ -29,11 +29,10 @@
#include "src/core/SkTLList.h"
#include "tools/ToolUtils.h"
-static SkBitmap make_bmp(int w, int h) {
- SkBitmap bmp;
- bmp.allocN32Pixels(w, h, true);
+static sk_sp<SkImage> make_img(int w, int h) {
+ auto surf = SkSurface::MakeRaster(SkImageInfo::MakeN32(w, h, kOpaque_SkAlphaType));
+ auto canvas = surf->getCanvas();
- SkCanvas canvas(bmp);
SkScalar wScalar = SkIntToScalar(w);
SkScalar hScalar = SkIntToScalar(h);
@@ -67,7 +66,7 @@
SK_ARRAY_COUNT(colors),
SkTileMode::kRepeat,
0, &mat));
- canvas.drawRect(rect, paint);
+ canvas->drawRect(rect, paint);
rect.inset(wScalar / 8, hScalar / 8);
mat.preTranslate(6 * wScalar, 6 * hScalar);
mat.postScale(SK_Scalar1 / 3, SK_Scalar1 / 3);
@@ -79,14 +78,14 @@
paint.setColor(SK_ColorLTGRAY);
constexpr char kTxt[] = "Skia";
SkPoint texPos = { wScalar / 17, hScalar / 2 + font.getSize() / 2.5f };
- canvas.drawSimpleText(kTxt, SK_ARRAY_COUNT(kTxt)-1, SkTextEncoding::kUTF8,
- texPos.fX, texPos.fY, font, paint);
+ canvas->drawSimpleText(kTxt, SK_ARRAY_COUNT(kTxt)-1, SkTextEncoding::kUTF8,
+ texPos.fX, texPos.fY, font, paint);
paint.setColor(SK_ColorBLACK);
paint.setStyle(SkPaint::kStroke_Style);
paint.setStrokeWidth(SK_Scalar1);
- canvas.drawSimpleText(kTxt, SK_ARRAY_COUNT(kTxt)-1, SkTextEncoding::kUTF8,
- texPos.fX, texPos.fY, font, paint);
- return bmp;
+ canvas->drawSimpleText(kTxt, SK_ARRAY_COUNT(kTxt)-1, SkTextEncoding::kUTF8,
+ texPos.fX, texPos.fY, font, paint);
+ return surf->makeImageSnapshot();
}
namespace skiagm {
@@ -147,7 +146,7 @@
rotM.setRotate(23.f, rect.centerX(), rect.centerY());
fClips.addToTail()->setPath(SkPath::Rect(rect).makeTransform(rotM));
- fBmp = make_bmp(100, 100);
+ fImg = make_img(100, 100);
}
void onDraw(SkCanvas* canvas) override {
@@ -157,7 +156,8 @@
SkPaint bgPaint;
bgPaint.setAlpha(0x15);
SkISize size = canvas->getBaseLayerSize();
- canvas->drawBitmapRect(fBmp, SkRect::MakeIWH(size.fWidth, size.fHeight), &bgPaint);
+ canvas->drawImageRect(fImg, SkRect::MakeIWH(size.fWidth, size.fHeight),
+ SkSamplingOptions(), &bgPaint);
constexpr char kTxt[] = "Clip Me!";
SkFont font(ToolUtils::create_portable_typeface(), 23);
@@ -185,9 +185,9 @@
}
canvas->translate(x, y);
clip->setOnCanvas(canvas, kIntersect_SkClipOp, SkToBool(aa));
- canvas->drawBitmap(fBmp, 0, 0);
+ canvas->drawImage(fImg, 0, 0);
canvas->restore();
- x += fBmp.width() + kMargin;
+ x += fImg->width() + kMargin;
}
for (int aa = 0; aa < 2; ++aa) {
@@ -216,10 +216,10 @@
canvas->restore();
x += textW + 2 * kMargin;
}
- y += fBmp.height() + kMargin;
+ y += fImg->height() + kMargin;
}
y = 0;
- startX += 2 * fBmp.width() + SkScalarCeilToInt(2 * textW) + 6 * kMargin;
+ startX += 2 * fImg->width() + SkScalarCeilToInt(2 * textW) + 6 * kMargin;
}
}
@@ -299,7 +299,7 @@
typedef SkTLList<Clip, 1> ClipList;
ClipList fClips;
- SkBitmap fBmp;
+ sk_sp<SkImage> fImg;;
using INHERITED = GM;
};
diff --git a/gm/copy_to_4444.cpp b/gm/copy_to_4444.cpp
index ff9a73b..aaa7349 100644
--- a/gm/copy_to_4444.cpp
+++ b/gm/copy_to_4444.cpp
@@ -54,9 +54,9 @@
bitmap.allocPixels(imageInfo);
SkCanvas offscreen(bitmap);
offscreen.clear(SK_ColorRED);
- canvas->drawBitmap(bitmap, 0, 0);
+ canvas->drawImage(bitmap.asImage(), 0, 0);
offscreen.clear(SK_ColorBLUE);
- canvas->drawBitmap(bitmap, 1, 1);
+ canvas->drawImage(bitmap.asImage(), 1, 1);
auto pack4444 = [](unsigned a, unsigned r, unsigned g, unsigned b) -> uint16_t {
return (a << 0) | (b << 4) | (g << 8) | (r << 12);
};
@@ -64,10 +64,10 @@
uint16_t blue4444 = pack4444(0xF, 0x0, 0x0, 0x0F);
SkPixmap redPixmap(imageInfo, &red4444, 2);
if (bitmap.writePixels(redPixmap, 0, 0)) {
- canvas->drawBitmap(bitmap, 2, 2);
+ canvas->drawImage(bitmap.asImage(), 2, 2);
}
SkPixmap bluePixmap(imageInfo, &blue4444, 2);
if (bitmap.writePixels(bluePixmap, 0, 0)) {
- canvas->drawBitmap(bitmap, 3, 3);
+ canvas->drawImage(bitmap.asImage(), 3, 3);
}
}
diff --git a/gm/filterfastbounds.cpp b/gm/filterfastbounds.cpp
index 284403d..4a505f8 100644
--- a/gm/filterfastbounds.cpp
+++ b/gm/filterfastbounds.cpp
@@ -87,7 +87,7 @@
SkCanvas temp(bm);
temp.clear(SK_ColorMAGENTA);
- canvas->drawBitmapRect(bm, r, &p);
+ canvas->drawImageRect(bm.asImage(), r, SkSamplingOptions(), &p);
}
constexpr drawMth gDrawMthds[] = {
diff --git a/gm/image.cpp b/gm/image.cpp
index b32c413..cbedd64 100644
--- a/gm/image.cpp
+++ b/gm/image.cpp
@@ -183,7 +183,7 @@
static void draw_pixmap(SkCanvas* canvas, const SkPixmap& pmap) {
SkBitmap bitmap;
bitmap.installPixels(pmap);
- canvas->drawBitmap(bitmap, 0, 0, nullptr);
+ canvas->drawImage(bitmap.asImage(), 0, 0);
}
static void show_scaled_pixels(SkCanvas* canvas, SkImage* image) {
diff --git a/gm/imageblurrepeatmode.cpp b/gm/imageblurrepeatmode.cpp
index 58b589c..ac0aef4 100644
--- a/gm/imageblurrepeatmode.cpp
+++ b/gm/imageblurrepeatmode.cpp
@@ -138,9 +138,9 @@
// draw and then clipping)).
DEF_SIMPLE_GM(imageblurrepeatunclipped, canvas, 256, 128) {
// To show translucency
- SkBitmap checkerboard = ToolUtils::create_checkerboard_bitmap(256, 128, SK_ColorLTGRAY,
- SK_ColorGRAY, 8);
- canvas->drawBitmap(checkerboard, 0, 0);
+ auto checkerboard = ToolUtils::create_checkerboard_image(256, 128, SK_ColorLTGRAY,
+ SK_ColorGRAY, 8);
+ canvas->drawImage(checkerboard, 0, 0);
// Make an image with one red and one blue band
SkBitmap bmp;
diff --git a/gm/lighting.cpp b/gm/lighting.cpp
index c2bded7..268842a 100644
--- a/gm/lighting.cpp
+++ b/gm/lighting.cpp
@@ -46,9 +46,8 @@
void drawClippedBitmap(SkCanvas* canvas, const SkPaint& paint, int x, int y) {
canvas->save();
canvas->translate(SkIntToScalar(x), SkIntToScalar(y));
- canvas->clipRect(SkRect::MakeWH(
- SkIntToScalar(fBitmap.width()), SkIntToScalar(fBitmap.height())));
- canvas->drawBitmap(fBitmap, 0, 0, &paint);
+ canvas->clipIRect(fBitmap.bounds());
+ canvas->drawImage(fBitmap.asImage(), 0, 0, SkSamplingOptions(), &paint);
canvas->restore();
}
diff --git a/gm/p3.cpp b/gm/p3.cpp
index 511b093..3c2347c 100644
--- a/gm/p3.cpp
+++ b/gm/p3.cpp
@@ -10,16 +10,14 @@
#include "include/core/SkCanvas.h"
#include "include/core/SkColor.h"
#include "include/core/SkColorSpace.h"
-#include "include/core/SkFilterQuality.h"
#include "include/core/SkFont.h"
+#include "include/core/SkImage.h"
#include "include/core/SkImageInfo.h"
#include "include/core/SkMatrix.h"
#include "include/core/SkPaint.h"
#include "include/core/SkPathEffect.h"
#include "include/core/SkPixmap.h"
#include "include/core/SkPoint.h"
-#include "include/core/SkRefCnt.h"
-#include "include/core/SkScalar.h"
#include "include/core/SkShader.h"
#include "include/core/SkString.h"
#include "include/core/SkTileMode.h"
@@ -145,7 +143,7 @@
paint.setColor4f({1,0,0,1}, p3.get());
SkCanvas{bm}.drawPaint(paint);
- canvas->drawBitmap(bm, 10,10);
+ canvas->drawImage(bm.asImage(), 10,10);
compare_pixel("drawBitmap P3 red, from drawPaint",
canvas, 10,10,
{1,0,0,1}, p3.get());
@@ -163,7 +161,7 @@
SkAssertResult(bm.peekPixels(&pm));
SkAssertResult(pm.erase({1,0,0,1}, p3.get()));
- canvas->drawBitmap(bm, 10,10);
+ canvas->drawImage(bm.asImage(), 10,10);
compare_pixel("drawBitmap P3 red, from SkPixmap::erase",
canvas, 10,10,
{1,0,0,1}, p3.get());
@@ -339,18 +337,19 @@
for (int i = 0; i < 256; i++) {
mask[i] = 255-i;
}
+
SkBitmap bm;
bm.installPixels(SkImageInfo::MakeA8(16,16), mask, 16);
SkPaint as_bitmap;
as_bitmap.setColor4f({1,0,0,1}, p3.get());
- as_bitmap.setFilterQuality(kLow_SkFilterQuality);
+ SkSamplingOptions sampling(SkFilterMode::kLinear);
SkPaint as_shader;
as_shader.setColor4f({1,0,0,1}, p3.get());
- as_shader.setShader(bm.makeShader(SkSamplingOptions(SkFilterMode::kLinear)));
+ as_shader.setShader(bm.makeShader(sampling));
- canvas->drawBitmap(bm, 10,10, &as_bitmap);
+ canvas->drawImage(bm.asImage(), 10,10, sampling, &as_bitmap);
compare_pixel("A8 sprite bitmap P3 red",
canvas, 10,10,
{1,0,0,1}, p3.get());
@@ -367,7 +366,7 @@
canvas->translate(0,80);
- canvas->drawBitmapRect(bm, {10,10,70,70}, &as_bitmap);
+ canvas->drawImageRect(bm.asImage(), {10,10,70,70}, sampling, &as_bitmap);
compare_pixel("A8 scaled bitmap P3 red",
canvas, 10,10,
{1,0,0,1}, p3.get());
diff --git a/gm/pictureimagegenerator.cpp b/gm/pictureimagegenerator.cpp
index 454ba18..ed10848 100644
--- a/gm/pictureimagegenerator.cpp
+++ b/gm/pictureimagegenerator.cpp
@@ -194,7 +194,7 @@
canvas->drawRect(SkRect::MakeXYWH(x, y,
SkIntToScalar(bm.width()),
SkIntToScalar(bm.height())), p);
- canvas->drawBitmap(bm, x, y);
+ canvas->drawImage(bm.asImage(), x, y);
}
}
diff --git a/gm/shadertext3.cpp b/gm/shadertext3.cpp
index 29861bc..36796b9 100644
--- a/gm/shadertext3.cpp
+++ b/gm/shadertext3.cpp
@@ -83,9 +83,10 @@
SkPaint bmpPaint;
bmpPaint.setAntiAlias(true);
- bmpPaint.setFilterQuality(kLow_SkFilterQuality);
bmpPaint.setAlphaf(0.5f);
- canvas->drawBitmap(fBmp, 5.f, 5.f, &bmpPaint);
+ SkSamplingOptions sampling(SkFilterMode::kLinear);
+
+ canvas->drawImage(fBmp.asImage(), 5.f, 5.f, sampling, &bmpPaint);
SkFont font(ToolUtils::create_portable_typeface(), SkIntToScalar(kPointSize));
SkPaint outlinePaint;
@@ -117,8 +118,7 @@
SkPaint fillPaint;
fillPaint.setAntiAlias(true);
fillPaint.setShader(fBmp.makeShader(kTileModes[tm0], kTileModes[tm1],
- SkSamplingOptions(SkFilterMode::kLinear),
- localM));
+ sampling, localM));
constexpr char kText[] = "B";
canvas->drawString(kText, 0, 0, font, fillPaint);
diff --git a/gm/showmiplevels.cpp b/gm/showmiplevels.cpp
index 75061df..0182cfe 100644
--- a/gm/showmiplevels.cpp
+++ b/gm/showmiplevels.cpp
@@ -21,301 +21,11 @@
#include "include/private/SkNx.h"
#include "src/core/SkMipmap.h"
#include "src/core/SkMipmapBuilder.h"
+#include "tools/Resources.h"
#include "tools/ToolUtils.h"
#include <math.h>
-#define SHOW_MIP_COLOR 0xFF000000
-
-static SkBitmap make_bitmap(int w, int h) {
- SkBitmap bm;
- bm.allocN32Pixels(w, h);
- SkCanvas canvas(bm);
- canvas.clear(0xFFFFFFFF);
- SkPaint paint;
- paint.setStyle(SkPaint::kStroke_Style);
- paint.setStrokeWidth(w / 16.0f);
- paint.setColor(SHOW_MIP_COLOR);
- canvas.drawCircle(w/2.0f, h/2.0f, w/3.0f, paint);
- return bm;
-}
-
-static SkBitmap make_bitmap2(int w, int h) {
- SkBitmap bm;
- bm.allocN32Pixels(w, h);
- SkCanvas canvas(bm);
- canvas.clear(0xFFFFFFFF);
- SkPaint paint;
- paint.setColor(SHOW_MIP_COLOR);
- paint.setStyle(SkPaint::kStroke_Style);
-
- SkScalar inset = 2;
- SkRect r = SkRect::MakeIWH(w, h).makeInset(0.5f, 0.5f);
- while (r.width() > 4) {
- canvas.drawRect(r, paint);
- r.inset(inset, inset);
- inset += 1;
- }
- return bm;
-}
-
-static SkBitmap make_bitmap3(int w, int h) {
- SkBitmap bm;
- bm.allocN32Pixels(w, h);
- SkCanvas canvas(bm);
- canvas.clear(0xFFFFFFFF);
- SkPaint paint;
- paint.setStyle(SkPaint::kStroke_Style);
- paint.setStrokeWidth(2.1f);
- paint.setColor(SHOW_MIP_COLOR);
-
- SkScalar s = SkIntToScalar(w);
- Sk4f p(s, -s, -s, s);
- Sk4f d(5);
- while (p[1] < s) {
- canvas.drawLine(p[0],p[1], p[2], p[3], paint);
- p = p + d;
- }
- return bm;
-}
-
-class ShowMipLevels : public skiagm::GM {
- const int fN;
- SkBitmap fBM[4];
-
-public:
- static unsigned gamma(unsigned n) {
- float x = n / 255.0f;
-#if 0
- x = sqrtf(x);
-#else
- if (x > 0.0031308f) {
- x = 1.055f * (powf(x, (1.0f / 2.4f))) - 0.055f;
- } else {
- x = 12.92f * x;
- }
-#endif
- return (int)(x * 255);
- }
-
- static void apply_gamma(const SkBitmap& bm) {
- return; // below is our experiment for sRGB correction
- for (int y = 0; y < bm.height(); ++y) {
- for (int x = 0; x < bm.width(); ++x) {
- SkPMColor c = *bm.getAddr32(x, y);
- unsigned r = gamma(SkGetPackedR32(c));
- unsigned g = gamma(SkGetPackedG32(c));
- unsigned b = gamma(SkGetPackedB32(c));
- *bm.getAddr32(x, y) = SkPackARGB32(0xFF, r, g, b);
- }
- }
- }
-
- ShowMipLevels(int N) : fN(N) { }
-
-protected:
-
- SkString onShortName() override {
- SkString str;
- str.printf("showmiplevels_%d", fN);
- return str;
- }
-
- SkISize onISize() override { return { 150, 862 }; }
-
- static void DrawAndFrame(SkCanvas* canvas, const SkBitmap& orig, SkScalar x, SkScalar y) {
- SkBitmap bm;
- ToolUtils::copy_to(&bm, orig.colorType(), orig);
- apply_gamma(bm);
-
- canvas->drawBitmap(bm, x, y, nullptr);
- SkPaint paint;
- paint.setStyle(SkPaint::kStroke_Style);
- paint.setColor(0xFFFFCCCC);
- canvas->drawRect(SkRect::MakeIWH(bm.width(), bm.height()).makeOffset(x, y).makeOutset(0.5f, 0.5f), paint);
- }
-
- template <typename F> void drawLevels(SkCanvas* canvas, const SkBitmap& baseBM, F func) {
- SkScalar x = 4;
- SkScalar y = 4;
-
- SkPixmap prevPM;
- baseBM.peekPixels(&prevPM);
-
- sk_sp<SkMipmap> mm(SkMipmap::Build(baseBM, nullptr));
-
- int index = 0;
- SkMipmap::Level level;
- SkScalar scale = 0.5f;
- while (mm->extractLevel(SkSize::Make(scale, scale), &level)) {
- SkBitmap bm = func(prevPM, level.fPixmap);
- DrawAndFrame(canvas, bm, x, y);
-
- if (level.fPixmap.width() <= 2 || level.fPixmap.height() <= 2) {
- break;
- }
- if (index & 1) {
- x += level.fPixmap.width() + 4;
- } else {
- y += level.fPixmap.height() + 4;
- }
- scale /= 2;
- prevPM = level.fPixmap;
- index += 1;
- }
- }
-
- void drawSet(SkCanvas* canvas, const SkBitmap& orig) {
- SkAutoCanvasRestore acr(canvas, true);
-
- drawLevels(canvas, orig, [](const SkPixmap& prev, const SkPixmap& curr) {
- SkBitmap bm;
- bm.installPixels(curr);
- return bm;
- });
- }
-
- void onOnceBeforeDraw() override {
- fBM[0] = ToolUtils::create_checkerboard_bitmap(fN, fN, SK_ColorBLACK, SK_ColorWHITE, 2);
- fBM[1] = make_bitmap(fN, fN);
- fBM[2] = make_bitmap2(fN, fN);
- fBM[3] = make_bitmap3(fN, fN);
- }
-
- void onDraw(SkCanvas* canvas) override {
- canvas->translate(4, 4);
- for (const auto& bm : fBM) {
- this->drawSet(canvas, bm);
- // round so we always produce an integral translate, so the GOLD tool won't show
- // unimportant diffs if this is drawn on a GPU with different rounding rules
- // since we draw the bitmaps using nearest-neighbor
- canvas->translate(0, SkScalarRoundToScalar(bm.height() * 0.85f));
- }
- }
-
-private:
- using INHERITED = skiagm::GM;
-};
-DEF_GM( return new ShowMipLevels(255); )
-DEF_GM( return new ShowMipLevels(256); )
-
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-void copy_to(SkBitmap* dst, SkColorType dstColorType, const SkBitmap& src) {
- if (kGray_8_SkColorType == dstColorType) {
- return ToolUtils::copy_to_g8(dst, src);
- }
-
- const SkBitmap* srcPtr = &src;
- SkBitmap tmp(src);
- if (kRGB_565_SkColorType == dstColorType) {
- tmp.setAlphaType(kOpaque_SkAlphaType);
- srcPtr = &tmp;
- }
-
- ToolUtils::copy_to(dst, dstColorType, *srcPtr);
-}
-
-/**
- * Show mip levels that were built, for all supported colortypes
- */
-class ShowMipLevels2 : public skiagm::GM {
- const int fW, fH;
- SkBitmap fBM[4];
-
-public:
- ShowMipLevels2(int w, int h) : fW(w), fH(h) { }
-
-protected:
-
- SkString onShortName() override {
- SkString str;
- str.printf("showmiplevels2_%dx%d", fW, fH);
- return str;
- }
-
- SkISize onISize() override {
- return { 824, 862 };
- }
-
- static void DrawAndFrame(SkCanvas* canvas, const SkBitmap& bm, SkScalar x, SkScalar y) {
- canvas->drawBitmap(bm, x, y, nullptr);
- SkPaint paint;
- paint.setStyle(SkPaint::kStroke_Style);
- paint.setColor(0xFFFFCCCC);
- canvas->drawRect(SkRect::MakeIWH(bm.width(), bm.height()).makeOffset(x, y).makeOutset(0.5f, 0.5f), paint);
- }
-
- void drawLevels(SkCanvas* canvas, const SkBitmap& baseBM) {
- SkScalar x = 4;
- SkScalar y = 4;
-
- sk_sp<SkMipmap> mm(SkMipmap::Build(baseBM, nullptr));
-
- int index = 0;
- SkMipmap::Level level;
- SkScalar scale = 0.5f;
- while (mm->extractLevel(SkSize::Make(scale, scale), &level)) {
- SkBitmap bm;
- bm.installPixels(level.fPixmap);
- DrawAndFrame(canvas, bm, x, y);
-
- if (level.fPixmap.width() <= 2 || level.fPixmap.height() <= 2) {
- break;
- }
- if (index & 1) {
- x += level.fPixmap.width() + 4;
- } else {
- y += level.fPixmap.height() + 4;
- }
- scale /= 2;
- index += 1;
- }
- }
-
- void drawSet(SkCanvas* canvas, const SkBitmap& orig) {
- const SkColorType ctypes[] = {
- kN32_SkColorType, kRGB_565_SkColorType, kARGB_4444_SkColorType, kGray_8_SkColorType
- };
-
- SkAutoCanvasRestore acr(canvas, true);
-
- for (auto ctype : ctypes) {
- SkBitmap bm;
- copy_to(&bm, ctype, orig);
- drawLevels(canvas, bm);
- canvas->translate(orig.width()/2 + 8.0f, 0);
- }
- }
-
- void onOnceBeforeDraw() override {
- fBM[0] = ToolUtils::create_checkerboard_bitmap(fW, fH, SHOW_MIP_COLOR, SK_ColorWHITE, 2);
- fBM[1] = make_bitmap(fW, fH);
- fBM[2] = make_bitmap2(fW, fH);
- fBM[3] = make_bitmap3(fW, fH);
- }
-
- void onDraw(SkCanvas* canvas) override {
- canvas->translate(4, 4);
- for (const auto& bm : fBM) {
- this->drawSet(canvas, bm);
- // round so we always produce an integral translate, so the GOLD tool won't show
- // unimportant diffs if this is drawn on a GPU with different rounding rules
- // since we draw the bitmaps using nearest-neighbor
- canvas->translate(0, SkScalarRoundToScalar(bm.height() * 0.85f));
- }
- }
-
-private:
- using INHERITED = skiagm::GM;
-};
-DEF_GM( return new ShowMipLevels2(255, 255); )
-DEF_GM( return new ShowMipLevels2(256, 255); )
-DEF_GM( return new ShowMipLevels2(255, 256); )
-DEF_GM( return new ShowMipLevels2(256, 256); )
-
-#include "tools/Resources.h"
-
class ShowMipLevels3 : public skiagm::GM {
sk_sp<SkImage> fImg;
diff --git a/gm/simpleaaclip.cpp b/gm/simpleaaclip.cpp
index cf4c9eb..5f78995 100644
--- a/gm/simpleaaclip.cpp
+++ b/gm/simpleaaclip.cpp
@@ -43,10 +43,11 @@
ToolUtils::copy_to(&bm2, bm.colorType(), bm);
- canvas->drawBitmap(bm2,
- SK_Scalar1 * mask.fBounds.fLeft,
- SK_Scalar1 * mask.fBounds.fTop,
- &paint);
+ canvas->drawImage(bm2.asImage(),
+ SK_Scalar1 * mask.fBounds.fLeft,
+ SK_Scalar1 * mask.fBounds.fTop,
+ SkSamplingOptions(),
+ &paint);
}
//////////////////////////////////////////////////////////////////////////////
diff --git a/gm/tablecolorfilter.cpp b/gm/tablecolorfilter.cpp
index 08f71a6..101905d 100644
--- a/gm/tablecolorfilter.cpp
+++ b/gm/tablecolorfilter.cpp
@@ -167,14 +167,16 @@
// Draw the first element of the first line
x = 0;
SkPaint paint;
- canvas->drawBitmap(bm, x, y, &paint);
+ SkSamplingOptions sampling;
+
+ canvas->drawImage(bm.asImage(), x, y);
// Draws the rest of the first line for this bitmap
// each draw being at xOffset of the previous one
for (unsigned i = 1; i < SK_ARRAY_COUNT(gColorFilterMakers); ++i) {
x += xOffset;
paint.setColorFilter(gColorFilterMakers[i]());
- canvas->drawBitmap(bm, x, y, &paint);
+ canvas->drawImage(bm.asImage(), x, y, sampling, &paint);
}
paint.setColorFilter(nullptr);
@@ -193,7 +195,7 @@
sk_sp<SkImageFilter> imageFilter2(SkImageFilters::ColorFilter(
std::move(colorFilter2), imageFilter1, nullptr));
paint.setImageFilter(std::move(imageFilter2));
- canvas->drawBitmap(bm, x, y, &paint);
+ canvas->drawImage(bm.asImage(), x, y, sampling, &paint);
x += xOffset;
}
}
diff --git a/gm/tallstretchedbitmaps.cpp b/gm/tallstretchedbitmaps.cpp
index d0e3ccf..0045b40 100644
--- a/gm/tallstretchedbitmaps.cpp
+++ b/gm/tallstretchedbitmaps.cpp
@@ -8,7 +8,7 @@
#include "gm/gm.h"
#include "include/core/SkBitmap.h"
#include "include/core/SkCanvas.h"
-#include "include/core/SkFilterQuality.h"
+#include "include/core/SkImage.h"
#include "include/core/SkPaint.h"
#include "include/core/SkRect.h"
#include "include/core/SkScalar.h"
@@ -93,9 +93,9 @@
SkIRect subRect = SkIRect::MakeLTRB(0, startItem * itemHeight,
bmp.width(), bmp.height());
SkRect dstRect = SkRect::MakeWH(SkIntToScalar(bmp.width()), 10.f * itemHeight);
- SkPaint paint;
- paint.setFilterQuality(kLow_SkFilterQuality);
- canvas->drawBitmapRect(bmp, subRect, dstRect, &paint);
+ canvas->drawImageRect(bmp.asImage(), SkRect::Make(subRect), dstRect,
+ SkSamplingOptions(SkFilterMode::kLinear), nullptr,
+ SkCanvas::kStrict_SrcRectConstraint);
canvas->translate(SkIntToScalar(bmp.width() + 10), 0);
}
}
diff --git a/gm/unpremul.cpp b/gm/unpremul.cpp
index 25ddae5..5e3cffb 100644
--- a/gm/unpremul.cpp
+++ b/gm/unpremul.cpp
@@ -11,6 +11,7 @@
#include "include/core/SkCanvas.h"
#include "include/core/SkColor.h"
#include "include/core/SkColorSpace.h"
+#include "include/core/SkImage.h"
#include "include/core/SkImageInfo.h"
#include "include/core/SkPaint.h"
@@ -69,7 +70,7 @@
bm.allocPixels(SkImageInfo::Make(100,100, kRGBA_8888_SkColorType, kUnpremul_SkAlphaType));
bm.eraseColor(color);
- canvas->drawBitmap(bm, 0,0, &paint);
+ canvas->drawImage(bm.asImage(), 0,0, SkSamplingOptions(), &paint);
grade(50,150);
}
diff --git a/gm/verifiers/gmverifier.cpp b/gm/verifiers/gmverifier.cpp
index 6b7c3e9..a09835a 100644
--- a/gm/verifiers/gmverifier.cpp
+++ b/gm/verifiers/gmverifier.cpp
@@ -76,7 +76,7 @@
SkBitmap goldVerifierBmp;
goldVerifierBmp.allocPixels(SkImageInfo::Make(size, VerifierColorInfo()));
SkCanvas verifierCanvas(goldVerifierBmp);
- verifierCanvas.drawBitmap(goldBmp, 0, 0);
+ verifierCanvas.drawImage(goldBmp.asImage(), 0, 0);
return goldVerifierBmp;
}
diff --git a/gm/wacky_yuv_formats.cpp b/gm/wacky_yuv_formats.cpp
index c2c0b75..5222459 100644
--- a/gm/wacky_yuv_formats.cpp
+++ b/gm/wacky_yuv_formats.cpp
@@ -395,7 +395,7 @@
SkMatrix matrix = SkEncodedOriginToMatrix(origin, origBM.width(), origBM.height());
SkAssertResult(matrix.invert(&matrix));
canvas.concat(matrix);
- canvas.drawBitmap(origBM, 0, 0);
+ canvas.drawImage(origBM.asImage(), 0, 0);
if (yuvColorSpace == kIdentity_SkYUVColorSpace) {
// To test the identity color space we use JPEG YUV planes
diff --git a/gm/xfermodeimagefilter.cpp b/gm/xfermodeimagefilter.cpp
index b498bc7..61f8cc4 100644
--- a/gm/xfermodeimagefilter.cpp
+++ b/gm/xfermodeimagefilter.cpp
@@ -199,7 +199,7 @@
canvas->save();
canvas->translate(SkIntToScalar(x), SkIntToScalar(y));
canvas->clipIRect(bitmap.bounds());
- canvas->drawBitmap(bitmap, 0, 0, &paint);
+ canvas->drawImage(bitmap.asImage(), 0, 0, SkSamplingOptions(), &paint);
canvas->restore();
}
diff --git a/gm/xfermodes.cpp b/gm/xfermodes.cpp
index 9bd41c2..2c180f4 100644
--- a/gm/xfermodes.cpp
+++ b/gm/xfermodes.cpp
@@ -133,11 +133,12 @@
*/
void draw_mode(SkCanvas* canvas, SkBlendMode mode, SrcType srcType, SkScalar x, SkScalar y) {
SkPaint p;
+ SkSamplingOptions sampling;
SkMatrix m;
bool restoreNeeded = false;
m.setTranslate(x, y);
- canvas->drawBitmap(fSrcB, x, y, &p);
+ canvas->drawImage(fSrcB.asImage(), x, y, sampling, &p);
p.setBlendMode(mode);
switch (srcType) {
case kSmallTransparentImage_SrcType: {
@@ -145,7 +146,7 @@
SkAutoCanvasRestore acr(canvas, true);
canvas->concat(m);
- canvas->drawBitmap(fTransparent, 0, 0, &p);
+ canvas->drawImage(fTransparent.asImage(), 0, 0, sampling, &p);
break;
}
case kQuarterClearInLayer_SrcType: {
@@ -195,7 +196,7 @@
case kRectangleImage_SrcType: {
SkAutoCanvasRestore acr(canvas, true);
canvas->concat(m);
- canvas->drawBitmap(fDstB, 0, 0, &p);
+ canvas->drawImage(fDstB.asImage(), 0, 0, sampling, &p);
break;
}
default: