1 // Copyright 2019 Google LLC. 2 // Use of this source code is governed by a BSD-style license that can be found in the LICENSE file. 3 4 #pragma once 5 6 #include "include/core/SkBitmap.h" 7 #include "include/core/SkStream.h" 8 #include "tools/flags/CommandLineFlags.h" 9 10 // HashAndEncode transforms any SkBitmap into a standard format, currently 11 // 16-bit unpremul RGBA in the Rec. 2020 color space. This lets us compare 12 // images from different backends or configurations, using feedHash() for 13 // direct content-based hashing, or encodePNG() for visual comparison. 14 class HashAndEncode { 15 public: 16 explicit HashAndEncode(const SkBitmap&); 17 18 // Feed uncompressed pixel data into a hash function like MD5. 19 void feedHash(SkWStream*) const; 20 21 // Encode pixels as a PNG in our standard format, with md5 and key/properties as metadata. 22 bool encodePNG(SkWStream*, 23 const char* md5, 24 CommandLineFlags::StringArray key, 25 CommandLineFlags::StringArray properties) const; 26 27 private: 28 const SkISize fSize; 29 std::unique_ptr<uint64_t[]> fPixels; // In our standard format mentioned above. 30 }; 31 32