From cab2dfb823d0bd7b035b5726ef607bc697faa374 Mon Sep 17 00:00:00 2001 From: Nico Burns Date: Tue, 21 May 2024 23:28:11 +0100 Subject: [PATCH] Gamma correction WIP --- examples/simple.rs | 16 ++++++++++++++++ output.png | Bin 19009 -> 0 bytes 2 files changed, 16 insertions(+) delete mode 100644 output.png diff --git a/examples/simple.rs b/examples/simple.rs index 76e3f9d0..6cea2cc8 100644 --- a/examples/simple.rs +++ b/examples/simple.rs @@ -16,6 +16,22 @@ use swash::scale::{Render, ScaleContext, Source, StrikeWith}; use swash::zeno; use swash::{FontRef, GlyphId}; +// fn u8_to_float(num: u8) -> f32 { +// num as f32 / 255.0 +// } + +// fn float_to_u8(num: f32) -> u8 { +// (num * 255.0) as u8 +// } + +// fn to_linear_rgb(srgb: f32) -> f32 { +// if srgb <= 0.04045 { +// srgb / 12.92 +// } else { +// ((srgb + 0.055) / 1.055).powf(2.4) +// } +// } + fn main() { // The text we are going to style and lay out let text = String::from( diff --git a/output.png b/output.png deleted file mode 100644 index d6575fc41902ebc91e16bbe12fd79ec072f3432b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19009 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