Lines Matching refs:image

36 #include "src/image/SkImage_Base.h"
37 #include "src/image/SkImage_GpuYUVA.h"
46 SkImageInfo read_pixels_info(SkImage* image) {
47 if (image->colorSpace()) {
48 return SkImageInfo::MakeS32(image->width(), image->height(), image->alphaType());
51 return SkImageInfo::MakeN32(image->width(), image->height(), image->alphaType());
54 // image `b` is assumed to be raster
127 // Want to ensure that our Release is called when the owning image is destroyed
163 static void test_encode(skiatest::Reporter* reporter, GrDirectContext* dContext, SkImage* image) {
165 sk_sp<SkData> origEncoded = image->encodeToData();
171 ERRORF(reporter, "failed to decode image!");
175 assert_equal(reporter, dContext, image, nullptr, decoded.get());
177 // Now see if we can instantiate an image from a subset of the surface/origEncoded
181 assert_equal(reporter, dContext, image, &ir, decoded.get());
225 // Test that image encoding failures do not break picture serialization/deserialization.
229 sk_sp<SkImage> image(surface->makeImageSnapshot());
230 REPORTER_ASSERT(reporter, image);
234 canvas->drawImage(image.get(), 0, 0, SkSamplingOptions());
318 sk_sp<SkImage> image(bm.asImage());
321 const bool sharedID = (image->uniqueID() == bm.getGenerationID());
324 const bool peekSuccess = image->peekPixels(&pmap);
327 const bool lazy = image->isLazyGenerated();
337 * This tests the caching (and preemptive purge) of the raster equivalent of a gpu-image.
346 sk_sp<SkImage> image(create_gpu_image(ctxInfo.directContext()));
347 const auto desc = SkBitmapCacheDesc::Make(image.get());
351 // now we can test drawing a gpu-backed image into a cpu-backed surface
358 surface->getCanvas()->drawImage(image, 0, 0);
371 image.reset(nullptr);
386 // Create an image from a picture.
388 // Create a texture image.
391 // Create a texture image in a another context.
400 sk_sp<SkImage> image(factory());
401 if (!image) {
402 ERRORF(reporter, "Error creating image.");
408 if ((origProxy = sk_gpu_test::GetTextureImageProxy(image.get(), dContext))) {
410 image->hasMipmaps());
411 origIsMippedTexture = image->hasMipmaps();
414 auto texImage = image->makeTextureImage(dContext, mipmapped, budgeted);
416 auto imageContext = as_IB(image)->context();
417 // We expect to fail if image comes from a different context
418 if (!image->isTextureBacked() || imageContext->priv().matches(dContext)) {
424 ERRORF(reporter, "makeTextureImage returned non-texture image.");
440 // We should only make a copy of an already texture-backed image if it didn't
442 if (image->isTextureBacked() && (!validRequestForMips || origIsMippedTexture)) {
452 if (image->width() != texImage->width() || image->height() != texImage->height()) {
453 ERRORF(reporter, "makeTextureImage changed the image size.");
455 if (image->alphaType() != texImage->alphaType()) {
456 ERRORF(reporter, "makeTextureImage changed image alpha type.");
475 sk_sp<SkImage> image = factory();
476 if (!image->isTextureBacked()) {
477 REPORTER_ASSERT(reporter, image->makeNonTextureImage().get() == image.get());
478 if (!(image = image->makeTextureImage(dContext))) {
482 auto rasterImage = image->makeNonTextureImage();
484 ERRORF(reporter, "makeNonTextureImage failed for texture-backed image.");
487 assert_equal(reporter, dContext, image.get(), nullptr, rasterImage.get());
526 ERRORF(reporter, "Failed to make unpremul texture image.");
641 sk_sp<SkImage> image = SkImage::MakeRasterData(info, data, rowBytes);
643 image.reset();
657 SkImage* image) {
658 if (!image) {
659 ERRORF(reporter, "Failed to create image!");
672 REPORTER_ASSERT(reporter, !image->readPixels(dContext, info, pixels, rowBytes, 0, 0));
676 REPORTER_ASSERT(reporter, !image->readPixels(dContext, info, pixels, rowBytes, -w, 0));
677 REPORTER_ASSERT(reporter, !image->readPixels(dContext, info, pixels, rowBytes, 0, -h));
678 REPORTER_ASSERT(reporter, !image->readPixels(dContext, info, pixels, rowBytes,
679 image->width(), 0));
680 REPORTER_ASSERT(reporter, !image->readPixels(dContext, info, pixels, rowBytes,
681 0, image->height()));
685 REPORTER_ASSERT(reporter, image->readPixels(dContext, info, pixels, rowBytes, 0, 0));
690 REPORTER_ASSERT(reporter, image->readPixels(dContext, info, pixels, rowBytes,
691 image->width() - w, image->height() - h));
696 REPORTER_ASSERT(reporter, image->readPixels(dContext, info, pixels, rowBytes, -1, -1));
702 REPORTER_ASSERT(reporter, image->readPixels(dContext, info, pixels, rowBytes,
703 image->width() - 1, image->height() - 1));
708 sk_sp<SkImage> image(create_image());
709 image_test_read_pixels(nullptr, reporter, image.get());
711 image = create_data_image();
712 image_test_read_pixels(nullptr, reporter, image.get());
715 image = create_rasterproc_image(&dataHolder);
716 image_test_read_pixels(nullptr, reporter, image.get());
717 image.reset();
720 image = create_codec_image();
721 image_test_read_pixels(nullptr, reporter, image.get());
729 const SkImage* image, const SkBitmap& bitmap) {
730 REPORTER_ASSERT(reporter, image->width() == bitmap.width());
731 REPORTER_ASSERT(reporter, image->height() == bitmap.height());
732 REPORTER_ASSERT(reporter, image->alphaType() == bitmap.alphaType());
740 REPORTER_ASSERT(reporter, image->readPixels(dContext, info, &imageColor, sizeof(SkPMColor),
746 const SkImage* image) {
747 if (!image) {
748 ERRORF(reporter, "Failed to create image.");
752 REPORTER_ASSERT(reporter, image->asLegacyBitmap(&bitmap));
753 check_legacy_bitmap(reporter, dContext, image, bitmap);
757 REPORTER_ASSERT(reporter, bitmap.extractSubset(&tmp, SkIRect::MakeWH(image->width() / 2,
758 image->height() / 2)));
767 sk_sp<SkImage> image(create_image());
768 test_legacy_bitmap(reporter, nullptr, image.get());
770 image = create_data_image();
771 test_legacy_bitmap(reporter, nullptr, image.get());
774 image = create_rasterproc_image(&dataHolder);
775 test_legacy_bitmap(reporter, nullptr, image.get());
776 image.reset();
779 image = create_codec_image();
780 test_legacy_bitmap(reporter, nullptr, image.get());
784 sk_sp<SkImage> image(create_gpu_image(dContext));
785 test_legacy_bitmap(reporter, dContext, image.get());
788 static void test_peek(skiatest::Reporter* reporter, SkImage* image, bool expectPeekSuccess) {
789 if (!image) {
790 ERRORF(reporter, "Failed to create image!");
794 bool success = image->peekPixels(&pm);
808 sk_sp<SkImage> image(create_image());
809 test_peek(reporter, image.get(), true);
811 image = create_data_image();
812 test_peek(reporter, image.get(), true);
815 image = create_rasterproc_image(&dataHolder);
816 test_peek(reporter, image.get(), true);
817 image.reset();
820 image = create_codec_image();
821 test_peek(reporter, image.get(), false);
824 sk_sp<SkImage> image(create_gpu_image(ctxInfo.directContext()));
825 test_peek(reporter, image.get(), false);
880 refImg.reset(nullptr); // force a release of the image
904 // 1) Create image, free image
905 // 2) Create image, draw, flush, free image
906 // 3) Create image, draw, free image, flush
908 // 4) Create image, draw*, flush*, free image
909 // 5) Create image, draw*, free iamge, flush*
911 // Case #1: Create image, free image
914 refImg.reset(nullptr); // force a release of the image
926 // Case #2: Create image, draw, flush, free image
933 refImg.reset(nullptr); // force a release of the image
936 // Case #3: Create image, draw, free image, flush
941 refImg.reset(nullptr); // force a release of the image
961 // Case #4: Create image, draw*, flush*, free image
971 refImg.reset(nullptr); // force a release of the image
974 // Case #5: Create image, draw*, free image, flush*
983 refImg.reset(nullptr); // force a release of the image
991 // Case #6: Verify that only one context can be using the image at a time
1068 sk_sp<SkImage> image = SkImage::MakeCrossContextFromPixmap(dContext, pixmap, false);
1069 REPORTER_ASSERT(reporter, image);
1071 auto [view, viewCT] = as_IB(image)->asView(dContext, GrMipmapped::kNo);
1076 GrColorType grCT = SkColorTypeToGrColorType(image->colorType());
1106 // Create a texture image in a another context.
1113 // Create an image that is too large to be texture backed.
1118 sk_sp<SkImage> image(testCase.fImageFactory());
1119 if (!image) {
1120 ERRORF(reporter, "Failed to create image!");
1124 GrBackendTexture origBackend = image->getBackendTexture(true);
1131 bool result = SkImage::MakeBackendTextureFromSkImage(context, std::move(image),
1135 ERRORF(reporter, "This image was expected to %s but did not.",
1156 sk_sp<SkImage> image(create_gpu_image(ctxInfo.directContext()));
1157 if (!image) {
1161 GrBackendTexture beTex = image->getBackendTexture(true);
1167 beTex = image->getBackendTexture(true);
1183 sk_sp<SkImage> image = GetResourceAsImage("images/mandrill_512_q075.jpg");
1184 REPORTER_ASSERT(r, srgb.get() == image->colorSpace());
1186 image = GetResourceAsImage("images/webp-color-profile-lossy.webp");
1188 bool success = image->colorSpace()->isNumericalTransferFn(&fn);
1194 image = create_picture_image(rec2020);
1195 REPORTER_ASSERT(r, SkColorSpace::Equals(rec2020.get(), image->colorSpace()));
1200 image = bitmap.asImage();
1201 REPORTER_ASSERT(r, SkColorSpace::Equals(rec2020.get(), image->colorSpace()));
1205 image = surface->makeImageSnapshot();
1206 REPORTER_ASSERT(r, nullptr == image->colorSpace());
1209 image = surface->makeImageSnapshot();
1210 REPORTER_ASSERT(r, SkColorSpace::Equals(rec2020.get(), image->colorSpace()));
1326 static void test_scale_pixels(skiatest::Reporter* reporter, const SkImage* image,
1328 SkImageInfo info = SkImageInfo::MakeN32Premul(image->width() * 2, image->height() * 2);
1334 if (!image->scalePixels(scaled, SkSamplingOptions(SkFilterMode::kLinear), chint)) {
1335 ERRORF(reporter, "Failed to scale image");
1347 // Test raster image
1354 // Test encoded image
1422 // Make a YUVA image.
1454 // Use image 1
1456 // Flushing image 0 should do nothing, but submit is still called.
1459 // Flushing image 1 should flush.
1462 // Flushing image 2 should do nothing, but submit is still called.
1466 // Use image 2
1468 // Flushing image 0 should do nothing, but submit is still called.
1471 // Flushing image 1 do nothing, but submit is still called.
1474 // Flushing image 2 should flush.
1479 // Flushing image 0 should do nothing, but submit is still called.
1482 // Flushing image 1 do nothing, but submit is still called.
1485 // Flushing image 2 should flush.
1521 sk_sp<SkImage> image = GetResourceAsImage("images/mandrill_128.png");
1522 const int W = image->width();
1523 const int H = image->height();
1529 check_roundtrip(image); // should trivially pass
1530 check_roundtrip(image->makeSubset({0, 0, W/2, H/2}));
1531 check_roundtrip(image->makeSubset({W/2, H/2, W, H}));
1532 check_roundtrip(image->makeColorSpace(SkColorSpace::MakeSRGBLinear()));