1*c8dee2aaSAndroid Build Coastguard Worker /* 2*c8dee2aaSAndroid Build Coastguard Worker * Copyright 2017 Google Inc. 3*c8dee2aaSAndroid Build Coastguard Worker * 4*c8dee2aaSAndroid Build Coastguard Worker * Use of this source code is governed by a BSD-style license that can be 5*c8dee2aaSAndroid Build Coastguard Worker * found in the LICENSE file. 6*c8dee2aaSAndroid Build Coastguard Worker */ 7*c8dee2aaSAndroid Build Coastguard Worker #ifndef SkKeyedImage_DEFINED 8*c8dee2aaSAndroid Build Coastguard Worker #define SkKeyedImage_DEFINED 9*c8dee2aaSAndroid Build Coastguard Worker 10*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkImage.h" 11*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkRefCnt.h" 12*c8dee2aaSAndroid Build Coastguard Worker #include "src/pdf/SkBitmapKey.h" 13*c8dee2aaSAndroid Build Coastguard Worker 14*c8dee2aaSAndroid Build Coastguard Worker class SkBitmap; 15*c8dee2aaSAndroid Build Coastguard Worker struct SkIRect; 16*c8dee2aaSAndroid Build Coastguard Worker 17*c8dee2aaSAndroid Build Coastguard Worker /** 18*c8dee2aaSAndroid Build Coastguard Worker This class has all the advantages of SkBitmaps and SkImages. 19*c8dee2aaSAndroid Build Coastguard Worker 20*c8dee2aaSAndroid Build Coastguard Worker The SkImage holds on to encoded data. The SkBitmapKey properly de-dups subsets. 21*c8dee2aaSAndroid Build Coastguard Worker */ 22*c8dee2aaSAndroid Build Coastguard Worker class SkKeyedImage { 23*c8dee2aaSAndroid Build Coastguard Worker public: SkKeyedImage()24*c8dee2aaSAndroid Build Coastguard Worker SkKeyedImage() {} 25*c8dee2aaSAndroid Build Coastguard Worker SkKeyedImage(sk_sp<SkImage>); 26*c8dee2aaSAndroid Build Coastguard Worker SkKeyedImage(const SkBitmap&); 27*c8dee2aaSAndroid Build Coastguard Worker SkKeyedImage(SkKeyedImage&&) = default; 28*c8dee2aaSAndroid Build Coastguard Worker SkKeyedImage(const SkKeyedImage&) = default; 29*c8dee2aaSAndroid Build Coastguard Worker 30*c8dee2aaSAndroid Build Coastguard Worker SkKeyedImage& operator=(SkKeyedImage&&) = default; 31*c8dee2aaSAndroid Build Coastguard Worker SkKeyedImage& operator=(const SkKeyedImage&) = default; 32*c8dee2aaSAndroid Build Coastguard Worker 33*c8dee2aaSAndroid Build Coastguard Worker explicit operator bool() const { return fImage != nullptr; } key()34*c8dee2aaSAndroid Build Coastguard Worker const SkBitmapKey& key() const { return fKey; } image()35*c8dee2aaSAndroid Build Coastguard Worker const sk_sp<SkImage>& image() const { return fImage; } 36*c8dee2aaSAndroid Build Coastguard Worker sk_sp<SkImage> release(); 37*c8dee2aaSAndroid Build Coastguard Worker SkKeyedImage subset(SkIRect subset) const; 38*c8dee2aaSAndroid Build Coastguard Worker 39*c8dee2aaSAndroid Build Coastguard Worker private: 40*c8dee2aaSAndroid Build Coastguard Worker sk_sp<SkImage> fImage; 41*c8dee2aaSAndroid Build Coastguard Worker SkBitmapKey fKey = {{0, 0, 0, 0}, 0}; 42*c8dee2aaSAndroid Build Coastguard Worker }; 43*c8dee2aaSAndroid Build Coastguard Worker 44*c8dee2aaSAndroid Build Coastguard Worker /** 45*c8dee2aaSAndroid Build Coastguard Worker * Given an Image, return the Bitmap Key that corresponds to it. If the Image 46*c8dee2aaSAndroid Build Coastguard Worker * wraps a Bitmap, use that Bitmap's key. 47*c8dee2aaSAndroid Build Coastguard Worker */ 48*c8dee2aaSAndroid Build Coastguard Worker SkBitmapKey SkBitmapKeyFromImage(const SkImage*); 49*c8dee2aaSAndroid Build Coastguard Worker #endif // SkKeyedImage_DEFINED 50