| #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 |