// 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=7a3bf8851bb7160e4e49c48f8c09639d
REG_FIDDLE(Image_encodeToData, 256, 256, false, 3) {
void draw(SkCanvas* canvas) {
    canvas->scale(4, 4);
    SkIRect subset = {0, 0, 16, 64};
    int x = 0;
    for (int quality : { 0, 10, 50, 100 } ) {
        SkJpegEncoder::Options options;
        options.fQuality = quality;
        sk_sp<SkData> data(SkJpegEncoder::Encode(nullptr, image.get(), options));
        sk_sp<SkImage> filtered = SkImages::DeferredFromEncodedData(data)->
                makeSubset(nullptr, subset);
        canvas->drawImage(filtered, x, 0);
        x += 16;
    }
}
}  // END FIDDLE
