1/*
2 * Copyright 2015 Google Inc.
3 *
4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file.
6 */
7
8#include "SkCanvas.h"
9#include "SkImagePriv.h"
10#include "Test.h"
11
12static const int gWidth = 20;
13static const int gHeight = 20;
14
15// Tests that SkNewImageFromBitmap obeys pixelref origin.
16DEF_TEST(SkImageFromBitmap_extractSubset, reporter) {
17    SkAutoTUnref<SkImage> image;
18    {
19        SkBitmap srcBitmap;
20        srcBitmap.allocN32Pixels(gWidth, gHeight);
21        srcBitmap.eraseColor(SK_ColorRED);
22        SkCanvas canvas(srcBitmap);
23        SkIRect r = SkIRect::MakeXYWH(5, 5, gWidth - 5, gWidth - 5);
24        SkPaint p;
25        p.setColor(SK_ColorGREEN);
26        canvas.drawIRect(r, p);
27        SkBitmap dstBitmap;
28        srcBitmap.extractSubset(&dstBitmap, r);
29        image.reset(SkImage::NewFromBitmap(dstBitmap));
30    }
31
32    SkBitmap tgt;
33    tgt.allocN32Pixels(gWidth, gHeight);
34    SkCanvas canvas(tgt);
35    canvas.clear(SK_ColorTRANSPARENT);
36    canvas.drawImage(image, 0, 0, nullptr);
37
38    uint32_t pixel = 0;
39    SkImageInfo info = SkImageInfo::Make(1, 1, kBGRA_8888_SkColorType, kUnpremul_SkAlphaType);
40    canvas.readPixels(info, &pixel, 4, 0, 0);
41    REPORTER_ASSERT(reporter, pixel == SK_ColorGREEN);
42    canvas.readPixels(info, &pixel, 4, gWidth - 6, gWidth - 6);
43    REPORTER_ASSERT(reporter, pixel == SK_ColorGREEN);
44
45    canvas.readPixels(info, &pixel, 4, gWidth - 5, gWidth - 5);
46    REPORTER_ASSERT(reporter, pixel == SK_ColorTRANSPARENT);
47}
48