| #ifndef _RIVE_IMAGECMP_HPP_ | |
| #define _RIVE_IMAGECMP_HPP_ | |
| #include "SkImage.h" | |
| #include <cstdint> | |
| struct ImageCmp | |
| { | |
| bool images_loaded; | |
| bool dimensions_equal; | |
| int max_component_diff; // 0..255 | |
| float ave_component_diff; // 0..1 | |
| size_t pixel_diffcount; | |
| bool identical() const | |
| { | |
| return images_loaded && dimensions_equal && max_component_diff == 0 && | |
| ave_component_diff == 0 && pixel_diffcount == 0; | |
| } | |
| static ImageCmp failedToLoad() { return {false, false, 0, 0}; } | |
| static ImageCmp dimensionMismatch() { return {true, false, 0, 0}; } | |
| static ImageCmp diff(int max, float ave, size_t pixel_diffcount) | |
| { | |
| return {true, true, max, ave, pixel_diffcount}; | |
| } | |
| }; | |
| ImageCmp image_cmp(sk_sp<SkImage> a, sk_sp<SkImage> b); | |
| uint32_t compute_diff0(uint32_t, uint32_t); | |
| uint32_t compute_diff1(uint32_t, uint32_t); | |
| sk_sp<SkImage> make_diff_image(sk_sp<SkImage> a, | |
| sk_sp<SkImage> b, | |
| uint32_t (*compute_diff)(uint32_t a, | |
| uint32_t b)); | |
| /* Always appends "name " + some info to the statusPath file | |
| * | |
| * if fails to read the images | |
| * statusFile += "failed" | |
| * elif pathA and pathB are identical | |
| * statusFile += "identical" | |
| * else if the images have different dimensions | |
| * statusFile += "sizemismatch" | |
| * else | |
| * statusFile += "max_component_diff ave_compoent_diff" | |
| * pathDir += name_diff.png and name_maxdiff.png | |
| */ | |
| void image_diff(const char name[], | |
| const char pathA[], | |
| const char pathB[], | |
| const char statusPath[], | |
| const char diffDir[]); | |
| #endif |