mirror of
https://github.com/GraphiteEditor/Graphite.git
synced 2026-09-27 06:08:13 +08:00
Raw-rs: Add preprocessing and demosaicing steps (#1796)
* add subtract black step * add scale colors step * add raw to image step * implement linear demosiacing and fix errors in previous code * fix missing variable * make dependencies of tests optional * fix error in raw-rs tests * fix typo in "demosiacing" * use camera data from ADC and remove downloader * cargo fmt * use file_stem instead of file_name * remove old camera data * use equality instead of subtring to find model * store camera_to_xyz in decimal form * Code review --------- Co-authored-by: Keavon Chambers <keavon@keavon.com>
This commit is contained in:
co-authored by
Keavon Chambers
parent
1b6d45ad30
commit
a9cfeeb219
@@ -29,8 +29,11 @@ pub enum TagId {
|
||||
JpegOffset = 0x201,
|
||||
JpegLength = 0x202,
|
||||
SonyToneCurve = 0x7010,
|
||||
BlackLevel = 0x7310,
|
||||
CfaPatternDim = 0x828d,
|
||||
CfaPattern = 0x828e,
|
||||
ColorMatrix1 = 0xc621,
|
||||
ColorMatrix2 = 0xc622,
|
||||
|
||||
#[num_enum(catch_all)]
|
||||
Unknown(u16),
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
use super::types::{Array, ConstArray, TagType, TypeByte, TypeIfd, TypeLong, TypeNumber, TypeShort, TypeSonyToneCurve, TypeString};
|
||||
use super::types::{Array, ConstArray, TagType, TypeByte, TypeIfd, TypeLong, TypeNumber, TypeSRational, TypeShort, TypeSonyToneCurve, TypeString};
|
||||
use super::{Ifd, TagId, TiffError, TiffRead};
|
||||
|
||||
use std::io::{Read, Seek};
|
||||
@@ -24,10 +24,13 @@ pub struct StripByteCounts;
|
||||
pub struct SubIfd;
|
||||
pub struct JpegOffset;
|
||||
pub struct JpegLength;
|
||||
pub struct CfaPatternDim;
|
||||
pub struct CfaPattern;
|
||||
pub struct SonyDataOffset;
|
||||
pub struct SonyToneCurve;
|
||||
pub struct BlackLevel;
|
||||
pub struct CfaPatternDim;
|
||||
pub struct CfaPattern;
|
||||
pub struct ColorMatrix1;
|
||||
pub struct ColorMatrix2;
|
||||
|
||||
impl SimpleTag for ImageWidth {
|
||||
type Type = TypeNumber;
|
||||
@@ -141,6 +144,20 @@ impl SimpleTag for CfaPattern {
|
||||
const NAME: &'static str = "CFA Pattern";
|
||||
}
|
||||
|
||||
impl SimpleTag for ColorMatrix1 {
|
||||
type Type = Array<TypeSRational>;
|
||||
|
||||
const ID: TagId = TagId::ColorMatrix1;
|
||||
const NAME: &'static str = "Color Matrix 1";
|
||||
}
|
||||
|
||||
impl SimpleTag for ColorMatrix2 {
|
||||
type Type = Array<TypeSRational>;
|
||||
|
||||
const ID: TagId = TagId::ColorMatrix2;
|
||||
const NAME: &'static str = "Color Matrix 2";
|
||||
}
|
||||
|
||||
impl SimpleTag for SonyDataOffset {
|
||||
type Type = TypeLong;
|
||||
|
||||
@@ -155,6 +172,12 @@ impl SimpleTag for SonyToneCurve {
|
||||
const NAME: &'static str = "Sony Tone Curve";
|
||||
}
|
||||
|
||||
impl SimpleTag for BlackLevel {
|
||||
const ID: TagId = TagId::BlackLevel;
|
||||
type Type = ConstArray<TypeShort, 4>;
|
||||
const NAME: &'static str = "Black Level";
|
||||
}
|
||||
|
||||
pub trait Tag {
|
||||
type Output;
|
||||
|
||||
|
||||
@@ -1,8 +1,30 @@
|
||||
pub struct Rational<T> {
|
||||
pub trait ToFloat {
|
||||
fn to_float(&self) -> f64;
|
||||
}
|
||||
|
||||
impl ToFloat for u32 {
|
||||
fn to_float(&self) -> f64 {
|
||||
*self as f64
|
||||
}
|
||||
}
|
||||
|
||||
impl ToFloat for i32 {
|
||||
fn to_float(&self) -> f64 {
|
||||
*self as f64
|
||||
}
|
||||
}
|
||||
|
||||
pub struct Rational<T: ToFloat> {
|
||||
pub numerator: T,
|
||||
pub denominator: T,
|
||||
}
|
||||
|
||||
impl<T: ToFloat> ToFloat for Rational<T> {
|
||||
fn to_float(&self) -> f64 {
|
||||
self.numerator.to_float() / self.denominator.to_float()
|
||||
}
|
||||
}
|
||||
|
||||
pub struct CurveLookupTable {
|
||||
table: Vec<u16>,
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user