// Copyright 2020 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"
REG_FIDDLE(f16to8888drawImageBug, 256, 256, false, 0) {
// f16to8888drawImageBug
void draw(SkCanvas* canvas) {
    sk_sp<SkColorSpace> colorSpace = SkColorSpace::MakeSRGBLinear();

    SkImageInfo imageInfo =
            SkImageInfo::Make(100, 100, kRGBA_F16_SkColorType, kPremul_SkAlphaType, colorSpace);
    sk_sp<SkSurface> surface = SkSurfaces::Raster(imageInfo);
    SkPaint p;
    surface->getCanvas()->drawRect(SkRect::MakeXYWH(20, 20, 40, 40), p);

    sk_sp<SkColorSpace> colorSpace2 = SkColorSpace::MakeSRGB();

    SkImageInfo imageInfo2 =
            SkImageInfo::Make(100, 100, kN32_SkColorType, kPremul_SkAlphaType, colorSpace2);
    sk_sp<SkSurface> surface2 = SkSurfaces::Raster(imageInfo2);
    surface2->getCanvas()->drawImage(surface->makeImageSnapshot(), 0, 0);

    canvas->drawImage(surface->makeImageSnapshot(), 0, 0);
    canvas->drawImage(surface2->makeImageSnapshot(), 50, 0);
}
}  // END FIDDLE
