Merge pull request #8 from zroug/rational-tags
Added support for rational tags
This commit is contained in:
1 file changed
+20
-2
+20
-2
@@ -6,7 +6,7 @@ use std::collections::{HashMap};
|
|||||||
use super::stream::{ByteOrder, SmartReader, EndianReader};
|
use super::stream::{ByteOrder, SmartReader, EndianReader};
|
||||||
use ::{TiffError, TiffResult};
|
use ::{TiffError, TiffResult};
|
||||||
|
|
||||||
use self::Value::{Unsigned, List};
|
use self::Value::{Unsigned, List, Rational};
|
||||||
|
|
||||||
macro_rules! tags {
|
macro_rules! tags {
|
||||||
{$(
|
{$(
|
||||||
@@ -90,7 +90,8 @@ pub enum Type {
|
|||||||
pub enum Value {
|
pub enum Value {
|
||||||
//Signed(i32),
|
//Signed(i32),
|
||||||
Unsigned(u32),
|
Unsigned(u32),
|
||||||
List(Vec<Value>)
|
List(Vec<Value>),
|
||||||
|
Rational(u32, u32)
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Value {
|
impl Value {
|
||||||
@@ -112,6 +113,7 @@ impl Value {
|
|||||||
Ok(new_vec)
|
Ok(new_vec)
|
||||||
},
|
},
|
||||||
Unsigned(val) => Ok(vec![val]),
|
Unsigned(val) => Ok(vec![val]),
|
||||||
|
Rational(numerator, denominator) => Ok(vec![numerator, denominator])
|
||||||
//_ => Err(::image::FormatError("Tag data malformed.".to_string()))
|
//_ => Err(::image::FormatError("Tag data malformed.".to_string()))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -178,6 +180,22 @@ impl Entry {
|
|||||||
}
|
}
|
||||||
Ok(List(v))
|
Ok(List(v))
|
||||||
}
|
}
|
||||||
|
(Type::RATIONAL, 1) => {
|
||||||
|
try!(decoder.goto_offset(try!(self.r(bo).read_u32())));
|
||||||
|
let numerator = try!(decoder.read_long());
|
||||||
|
let denominator = try!(decoder.read_long());
|
||||||
|
Ok(Rational(numerator, denominator))
|
||||||
|
},
|
||||||
|
(Type::RATIONAL, n) => {
|
||||||
|
let mut v = Vec::with_capacity(n as usize);
|
||||||
|
try!(decoder.goto_offset(try!(self.r(bo).read_u32())));
|
||||||
|
for _ in 0 .. n {
|
||||||
|
let numerator = try!(decoder.read_long());
|
||||||
|
let denominator = try!(decoder.read_long());
|
||||||
|
v.push(Rational(numerator, denominator))
|
||||||
|
}
|
||||||
|
Ok(List(v))
|
||||||
|
},
|
||||||
_ => Err(TiffError::UnsupportedError("Unsupported data type.".to_string()))
|
_ => Err(TiffError::UnsupportedError("Unsupported data type.".to_string()))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in new issue
Block a user