OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2013 Google Inc. | 2 * Copyright 2013 Google Inc. |
3 * | 3 * |
4 * Use of this source code is governed by a BSD-style license that can be | 4 * Use of this source code is governed by a BSD-style license that can be |
5 * found in the LICENSE file. | 5 * found in the LICENSE file. |
6 */ | 6 */ |
7 | 7 |
8 #include "SkCanvas.h" | 8 #include "SkCanvas.h" |
9 #include "SkData.h" | 9 #include "SkData.h" |
10 #include "SkDevice.h" | 10 #include "SkDevice.h" |
(...skipping 372 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
383 REPORTER_ASSERT(reporter, has_pixels(pixels, w*h - 1, notExpected)); | 383 REPORTER_ASSERT(reporter, has_pixels(pixels, w*h - 1, notExpected)); |
384 | 384 |
385 // partial bottom-right should succeed | 385 // partial bottom-right should succeed |
386 set_pixels(pixels, w*h, notExpected); | 386 set_pixels(pixels, w*h, notExpected); |
387 REPORTER_ASSERT(reporter, image->readPixels(info, pixels, rowBytes, | 387 REPORTER_ASSERT(reporter, image->readPixels(info, pixels, rowBytes, |
388 image->width() - 1, image->heigh
t() - 1)); | 388 image->width() - 1, image->heigh
t() - 1)); |
389 REPORTER_ASSERT(reporter, pixels[0] == expected); | 389 REPORTER_ASSERT(reporter, pixels[0] == expected); |
390 REPORTER_ASSERT(reporter, has_pixels(&pixels[1], w*h - 1, notExpected)); | 390 REPORTER_ASSERT(reporter, has_pixels(&pixels[1], w*h - 1, notExpected)); |
391 } | 391 } |
392 | 392 |
| 393 static void check_legacy_bitmap(skiatest::Reporter* reporter, const SkImage* ima
ge, |
| 394 const SkBitmap& bitmap, SkImage::LegacyBitmapMod
e mode) { |
| 395 REPORTER_ASSERT(reporter, image->width() == bitmap.width()); |
| 396 REPORTER_ASSERT(reporter, image->height() == bitmap.height()); |
| 397 REPORTER_ASSERT(reporter, image->isOpaque() == bitmap.isOpaque()); |
| 398 |
| 399 if (SkImage::kRO_LegacyBitmapMode == mode) { |
| 400 REPORTER_ASSERT(reporter, bitmap.isImmutable()); |
| 401 } |
| 402 |
| 403 SkAutoLockPixels alp(bitmap); |
| 404 REPORTER_ASSERT(reporter, bitmap.getPixels()); |
| 405 |
| 406 const SkImageInfo info = SkImageInfo::MakeN32(1, 1, bitmap.alphaType()); |
| 407 SkPMColor imageColor; |
| 408 REPORTER_ASSERT(reporter, image->readPixels(info, &imageColor, sizeof(SkPMCo
lor), 0, 0)); |
| 409 REPORTER_ASSERT(reporter, imageColor == *bitmap.getAddr32(0, 0)); |
| 410 } |
| 411 |
393 static void test_legacy_bitmap(skiatest::Reporter* reporter, const SkImage* imag
e) { | 412 static void test_legacy_bitmap(skiatest::Reporter* reporter, const SkImage* imag
e) { |
394 const SkImage::LegacyBitmapMode modes[] = { | 413 const SkImage::LegacyBitmapMode modes[] = { |
395 SkImage::kRO_LegacyBitmapMode, | 414 SkImage::kRO_LegacyBitmapMode, |
396 SkImage::kRW_LegacyBitmapMode, | 415 SkImage::kRW_LegacyBitmapMode, |
397 }; | 416 }; |
398 for (size_t i = 0; i < SK_ARRAY_COUNT(modes); ++i) { | 417 for (size_t i = 0; i < SK_ARRAY_COUNT(modes); ++i) { |
399 SkBitmap bitmap; | 418 SkBitmap bitmap; |
400 REPORTER_ASSERT(reporter, image->asLegacyBitmap(&bitmap, modes[i])); | 419 REPORTER_ASSERT(reporter, image->asLegacyBitmap(&bitmap, modes[i])); |
| 420 check_legacy_bitmap(reporter, image, bitmap, modes[i]); |
401 | 421 |
402 REPORTER_ASSERT(reporter, image->width() == bitmap.width()); | 422 // Test subsetting to exercise the rowBytes logic. |
403 REPORTER_ASSERT(reporter, image->height() == bitmap.height()); | 423 SkBitmap tmp; |
404 REPORTER_ASSERT(reporter, image->isOpaque() == bitmap.isOpaque()); | 424 REPORTER_ASSERT(reporter, bitmap.extractSubset(&tmp, SkIRect::MakeWH(ima
ge->width() / 2, |
| 425 ima
ge->height() / 2))); |
| 426 SkAutoTUnref<SkImage> subsetImage(SkImage::NewFromBitmap(tmp)); |
| 427 REPORTER_ASSERT(reporter, subsetImage); |
405 | 428 |
406 bitmap.lockPixels(); | 429 SkBitmap subsetBitmap; |
407 REPORTER_ASSERT(reporter, bitmap.getPixels()); | 430 REPORTER_ASSERT(reporter, subsetImage->asLegacyBitmap(&subsetBitmap, mod
es[i])); |
408 | 431 check_legacy_bitmap(reporter, subsetImage, subsetBitmap, modes[i]); |
409 const SkImageInfo info = SkImageInfo::MakeN32(1, 1, bitmap.alphaType()); | |
410 SkPMColor imageColor; | |
411 REPORTER_ASSERT(reporter, image->readPixels(info, &imageColor, sizeof(Sk
PMColor), 0, 0)); | |
412 REPORTER_ASSERT(reporter, imageColor == *bitmap.getAddr32(0, 0)); | |
413 | |
414 if (SkImage::kRO_LegacyBitmapMode == modes[i]) { | |
415 REPORTER_ASSERT(reporter, bitmap.isImmutable()); | |
416 } | |
417 } | 432 } |
418 } | 433 } |
419 | 434 |
420 static void test_imagepeek(skiatest::Reporter* reporter, GrContextFactory* facto
ry) { | 435 static void test_imagepeek(skiatest::Reporter* reporter, GrContextFactory* facto
ry) { |
421 static const struct { | 436 static const struct { |
422 ImageType fType; | 437 ImageType fType; |
423 bool fPeekShouldSucceed; | 438 bool fPeekShouldSucceed; |
424 const char* fName; | 439 const char* fName; |
425 } gRec[] = { | 440 } gRec[] = { |
426 { kRasterCopy_ImageType, true, "RasterCopy" }, | 441 { kRasterCopy_ImageType, true, "RasterCopy" }, |
(...skipping 564 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
991 // We expect the ref'd image to see the new color, but cpy'd one should stil
l see the old color | 1006 // We expect the ref'd image to see the new color, but cpy'd one should stil
l see the old color |
992 test_image_color(reporter, refImg, expected1); | 1007 test_image_color(reporter, refImg, expected1); |
993 test_image_color(reporter, cpyImg, expected0); | 1008 test_image_color(reporter, cpyImg, expected0); |
994 | 1009 |
995 // Now exercise the release proc | 1010 // Now exercise the release proc |
996 REPORTER_ASSERT(reporter, !releaseCtx.fIsReleased); | 1011 REPORTER_ASSERT(reporter, !releaseCtx.fIsReleased); |
997 refImg.reset(NULL); // force a release of the image | 1012 refImg.reset(NULL); // force a release of the image |
998 REPORTER_ASSERT(reporter, releaseCtx.fIsReleased); | 1013 REPORTER_ASSERT(reporter, releaseCtx.fIsReleased); |
999 } | 1014 } |
1000 #endif | 1015 #endif |
OLD | NEW |