173953e7d00f0a75a98e985ceed88059d35945327kkinnunen/*
273953e7d00f0a75a98e985ceed88059d35945327kkinnunen * Copyright 2015 Google Inc.
373953e7d00f0a75a98e985ceed88059d35945327kkinnunen *
473953e7d00f0a75a98e985ceed88059d35945327kkinnunen * Use of this source code is governed by a BSD-style license that can be
573953e7d00f0a75a98e985ceed88059d35945327kkinnunen * found in the LICENSE file.
673953e7d00f0a75a98e985ceed88059d35945327kkinnunen */
773953e7d00f0a75a98e985ceed88059d35945327kkinnunen
89a53fd7c41554630124522f4b6eedc16912abbb7robertphillips#include "SkCanvas.h"
973953e7d00f0a75a98e985ceed88059d35945327kkinnunen#include "SkImagePriv.h"
1073953e7d00f0a75a98e985ceed88059d35945327kkinnunen#include "Test.h"
1173953e7d00f0a75a98e985ceed88059d35945327kkinnunen
1273953e7d00f0a75a98e985ceed88059d35945327kkinnunenstatic const int gWidth = 20;
1373953e7d00f0a75a98e985ceed88059d35945327kkinnunenstatic const int gHeight = 20;
1473953e7d00f0a75a98e985ceed88059d35945327kkinnunen
1573953e7d00f0a75a98e985ceed88059d35945327kkinnunen// Tests that SkNewImageFromBitmap obeys pixelref origin.
1673953e7d00f0a75a98e985ceed88059d35945327kkinnunenDEF_TEST(SkImageFromBitmap_extractSubset, reporter) {
179ce9d6772df650ceb0511f275e1a83dffa78ff72reed    sk_sp<SkImage> image;
1873953e7d00f0a75a98e985ceed88059d35945327kkinnunen    {
1973953e7d00f0a75a98e985ceed88059d35945327kkinnunen        SkBitmap srcBitmap;
2073953e7d00f0a75a98e985ceed88059d35945327kkinnunen        srcBitmap.allocN32Pixels(gWidth, gHeight);
2173953e7d00f0a75a98e985ceed88059d35945327kkinnunen        srcBitmap.eraseColor(SK_ColorRED);
229a53fd7c41554630124522f4b6eedc16912abbb7robertphillips        SkCanvas canvas(srcBitmap);
2373953e7d00f0a75a98e985ceed88059d35945327kkinnunen        SkIRect r = SkIRect::MakeXYWH(5, 5, gWidth - 5, gWidth - 5);
2473953e7d00f0a75a98e985ceed88059d35945327kkinnunen        SkPaint p;
2573953e7d00f0a75a98e985ceed88059d35945327kkinnunen        p.setColor(SK_ColorGREEN);
2673953e7d00f0a75a98e985ceed88059d35945327kkinnunen        canvas.drawIRect(r, p);
2773953e7d00f0a75a98e985ceed88059d35945327kkinnunen        SkBitmap dstBitmap;
2873953e7d00f0a75a98e985ceed88059d35945327kkinnunen        srcBitmap.extractSubset(&dstBitmap, r);
299ce9d6772df650ceb0511f275e1a83dffa78ff72reed        image = SkImage::MakeFromBitmap(dstBitmap);
3073953e7d00f0a75a98e985ceed88059d35945327kkinnunen    }
3173953e7d00f0a75a98e985ceed88059d35945327kkinnunen
3273953e7d00f0a75a98e985ceed88059d35945327kkinnunen    SkBitmap tgt;
3373953e7d00f0a75a98e985ceed88059d35945327kkinnunen    tgt.allocN32Pixels(gWidth, gHeight);
349a53fd7c41554630124522f4b6eedc16912abbb7robertphillips    SkCanvas canvas(tgt);
3573953e7d00f0a75a98e985ceed88059d35945327kkinnunen    canvas.clear(SK_ColorTRANSPARENT);
3696fcdcc219d2a0d3579719b84b28bede76efba64halcanary    canvas.drawImage(image, 0, 0, nullptr);
3773953e7d00f0a75a98e985ceed88059d35945327kkinnunen
3873953e7d00f0a75a98e985ceed88059d35945327kkinnunen    uint32_t pixel = 0;
39a9d9a392380952006303d83c35a63a32dffd0b36kkinnunen    SkImageInfo info = SkImageInfo::Make(1, 1, kBGRA_8888_SkColorType, kUnpremul_SkAlphaType);
4073953e7d00f0a75a98e985ceed88059d35945327kkinnunen    canvas.readPixels(info, &pixel, 4, 0, 0);
4173953e7d00f0a75a98e985ceed88059d35945327kkinnunen    REPORTER_ASSERT(reporter, pixel == SK_ColorGREEN);
4273953e7d00f0a75a98e985ceed88059d35945327kkinnunen    canvas.readPixels(info, &pixel, 4, gWidth - 6, gWidth - 6);
4373953e7d00f0a75a98e985ceed88059d35945327kkinnunen    REPORTER_ASSERT(reporter, pixel == SK_ColorGREEN);
4473953e7d00f0a75a98e985ceed88059d35945327kkinnunen
4573953e7d00f0a75a98e985ceed88059d35945327kkinnunen    canvas.readPixels(info, &pixel, 4, gWidth - 5, gWidth - 5);
4673953e7d00f0a75a98e985ceed88059d35945327kkinnunen    REPORTER_ASSERT(reporter, pixel == SK_ColorTRANSPARENT);
4773953e7d00f0a75a98e985ceed88059d35945327kkinnunen}
48