skia2/docs/examples/Pixmap_scalePixels.cpp
Adlai Holler bcfc554fde Add GrDirectContext arg to SkImage::readPixels
Note: The polarity of the staging flag is inverted from usual because
a G3 dependency with no SkUserConfig.h relies on the legacy API.

Once this lands, we will migrate them and others, then remove the
staging API. The inverted staging flag is kind of nice, actually - I may
use that pattern in the future. It means less total CLs and it's just as
easy to flip the bit on or off during debugging.

Bug: skia:104662
Change-Id: I48cba1eeae3e2e6f79918c6d243e0666e68ec71b
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/310656
Reviewed-by: Brian Salomon <bsalomon@google.com>
Reviewed-by: Robert Phillips <robertphillips@google.com>
Commit-Queue: Adlai Holler <adlai@google.com>
2020-08-27 19:26:29 +00:00

27 lines
1.1 KiB
C++

// Copyright 2019 Google LLC.
// Use of this source code is governed by a BSD-style license that can be found in the LICENSE file.
#include "tools/fiddle/examples.h"
// HASH=8e3c8a9c1d0d2e9b8bf66e24d274f792
REG_FIDDLE(Pixmap_scalePixels, 256, 256, false, 3) {
void draw(SkCanvas* canvas) {
SkImageInfo info = SkImageInfo::MakeN32Premul(image->width(), image->height());
std::vector<int32_t> srcPixels;
int rowBytes = image->width() * 4;
srcPixels.resize(image->height() * rowBytes);
SkPixmap pixmap(info, (const void*) &srcPixels.front(), rowBytes);
image->readPixels(nullptr, pixmap, 0, 0);
for (int offset : { 32, 64, 96 } ) {
info = SkImageInfo::MakeN32Premul(image->width() + offset, image->height());
rowBytes = info.width() * 4;
std::vector<int32_t> dstPixels;
dstPixels.resize(image->height() * rowBytes);
SkPixmap dstmap(info, &dstPixels.front(), rowBytes);
pixmap.scalePixels(dstmap, kMedium_SkFilterQuality);
SkBitmap bitmap;
bitmap.installPixels(dstmap);
canvas->translate(32, 32);
canvas->drawBitmap(bitmap, 0, 0);
}
}
} // END FIDDLE