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 12 static const int gWidth = 20; 13 static const int gHeight = 20; 14 15 // Tests that SkNewImageFromBitmap obeys pixelref origin. 16 DEF_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