Verify WhiteIsZero invert, add Gray(1) color type
This was found through the fax4 decoding that is always bilevel. No longer silently ignore an unknown color type when a photometric interpretation requires an inversion. DICOM requires that WhiteIsZero and BlackIsZero are only used for samples-per-pixel=1 but we do not strictly enforce that early. Previously for the result Multiband color we just ignored the tag which is also not right.
This commit is contained in:
1 parent
7c6c327817
commit
bc71086a96
5 files changed
+33
-8
No files matched your search
@@ -344,6 +344,9 @@ impl Image {
|
||||
),
|
||||
)),
|
||||
},
|
||||
// TODO: treatment of WhiteIsZero is not quite consistent with `invert_colors` that is
|
||||
// later called when that interpretation is read. That function does not support
|
||||
// Multiband as a color type and will error. It's unclear how to resolve that exactly.
|
||||
PhotometricInterpretation::BlackIsZero | PhotometricInterpretation::WhiteIsZero => {
|
||||
match self.samples {
|
||||
1 => Ok(ColorType::Gray(self.bits_per_sample)),
|
||||
@@ -684,7 +687,7 @@ impl Image {
|
||||
);
|
||||
}
|
||||
if photometric_interpretation == PhotometricInterpretation::WhiteIsZero {
|
||||
super::invert_colors(tile, color_type, self.sample_format);
|
||||
super::invert_colors(tile, color_type, self.sample_format)?;
|
||||
}
|
||||
} else if chunk_row_bytes > data_row_bytes && self.predictor == Predictor::FloatingPoint {
|
||||
// The floating point predictor shuffles the padding bytes into the encoded output, so
|
||||
@@ -701,7 +704,7 @@ impl Image {
|
||||
_ => unreachable!(),
|
||||
}
|
||||
if photometric_interpretation == PhotometricInterpretation::WhiteIsZero {
|
||||
super::invert_colors(row, color_type, self.sample_format);
|
||||
super::invert_colors(row, color_type, self.sample_format)?;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
@@ -723,7 +726,7 @@ impl Image {
|
||||
predictor,
|
||||
);
|
||||
if photometric_interpretation == PhotometricInterpretation::WhiteIsZero {
|
||||
super::invert_colors(row, color_type, self.sample_format);
|
||||
super::invert_colors(row, color_type, self.sample_format)?;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user