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