swf: Move num_colors into BitmapFormat::ColorMap8
This commit is contained in:
parent
53cc9f38fc
commit
b8eae51888
|
@ -440,12 +440,12 @@ pub fn decode_define_bits_lossless(
|
|||
}
|
||||
decoded_data
|
||||
}
|
||||
(1, swf::BitmapFormat::ColorMap8) => {
|
||||
(1, swf::BitmapFormat::ColorMap8 { num_colors }) => {
|
||||
let mut i = 0;
|
||||
let padded_width = (swf_tag.width + 0b11) & !0b11;
|
||||
|
||||
let mut palette = Vec::with_capacity(swf_tag.num_colors as usize + 1);
|
||||
for _ in 0..=swf_tag.num_colors {
|
||||
let mut palette = Vec::with_capacity(num_colors as usize + 1);
|
||||
for _ in 0..=num_colors {
|
||||
palette.push(Color {
|
||||
r: decoded_data[i],
|
||||
g: decoded_data[i + 1],
|
||||
|
@ -476,12 +476,12 @@ pub fn decode_define_bits_lossless(
|
|||
}
|
||||
out_data
|
||||
}
|
||||
(2, swf::BitmapFormat::ColorMap8) => {
|
||||
(2, swf::BitmapFormat::ColorMap8 { num_colors }) => {
|
||||
let mut i = 0;
|
||||
let padded_width = (swf_tag.width + 0b11) & !0b11;
|
||||
|
||||
let mut palette = Vec::with_capacity(swf_tag.num_colors as usize + 1);
|
||||
for _ in 0..=swf_tag.num_colors {
|
||||
let mut palette = Vec::with_capacity(num_colors as usize + 1);
|
||||
for _ in 0..=num_colors {
|
||||
palette.push(Color {
|
||||
r: decoded_data[i],
|
||||
g: decoded_data[i + 1],
|
||||
|
|
|
@ -2554,19 +2554,17 @@ impl<'a> Reader<'a> {
|
|||
|
||||
pub fn read_define_bits_lossless(&mut self, version: u8) -> Result<DefineBitsLossless<'a>> {
|
||||
let id = self.read_character_id()?;
|
||||
let format = match self.read_u8()? {
|
||||
3 => BitmapFormat::ColorMap8,
|
||||
let format = self.read_u8()?;
|
||||
let width = self.read_u16()?;
|
||||
let height = self.read_u16()?;
|
||||
let format = match format {
|
||||
3 => BitmapFormat::ColorMap8 {
|
||||
num_colors: self.read_u8()?,
|
||||
},
|
||||
4 if version == 1 => BitmapFormat::Rgb15,
|
||||
5 => BitmapFormat::Rgb32,
|
||||
_ => return Err(Error::invalid_data("Invalid bitmap format.")),
|
||||
};
|
||||
let width = self.read_u16()?;
|
||||
let height = self.read_u16()?;
|
||||
let num_colors = if format == BitmapFormat::ColorMap8 {
|
||||
self.read_u8()?
|
||||
} else {
|
||||
0
|
||||
};
|
||||
let data = self.read_slice_to_end();
|
||||
Ok(DefineBitsLossless {
|
||||
version,
|
||||
|
@ -2574,7 +2572,6 @@ impl<'a> Reader<'a> {
|
|||
format,
|
||||
width,
|
||||
height,
|
||||
num_colors,
|
||||
data,
|
||||
})
|
||||
}
|
||||
|
|
|
@ -165,7 +165,6 @@ pub fn tag_tests() -> Vec<TagTestData> {
|
|||
format: BitmapFormat::Rgb32,
|
||||
width: 8,
|
||||
height: 8,
|
||||
num_colors: 0,
|
||||
data: &[
|
||||
120, 218, 251, 207, 192, 240, 255, 255, 8, 198, 0, 4, 128, 127, 129,
|
||||
],
|
||||
|
@ -183,7 +182,6 @@ pub fn tag_tests() -> Vec<TagTestData> {
|
|||
format: BitmapFormat::Rgb32,
|
||||
width: 8,
|
||||
height: 8,
|
||||
num_colors: 0,
|
||||
data: &[
|
||||
120, 218, 107, 96, 96, 168, 107, 24, 193, 24, 0, 227, 81, 63, 129,
|
||||
],
|
||||
|
|
|
@ -1408,13 +1408,12 @@ pub struct DefineBitsLossless<'a> {
|
|||
pub format: BitmapFormat,
|
||||
pub width: u16,
|
||||
pub height: u16,
|
||||
pub num_colors: u8,
|
||||
pub data: &'a [u8],
|
||||
}
|
||||
|
||||
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
|
||||
pub enum BitmapFormat {
|
||||
ColorMap8,
|
||||
ColorMap8 { num_colors: u8 },
|
||||
Rgb15,
|
||||
Rgb32,
|
||||
}
|
||||
|
|
|
@ -555,7 +555,7 @@ impl<W: Write> Writer<W> {
|
|||
|
||||
Tag::DefineBitsLossless(ref tag) => {
|
||||
let mut length = 7 + tag.data.len();
|
||||
if tag.format == BitmapFormat::ColorMap8 {
|
||||
if let BitmapFormat::ColorMap8 { .. } = tag.format {
|
||||
length += 1;
|
||||
}
|
||||
// TODO(Herschel): Throw error if RGB15 in tag version 2.
|
||||
|
@ -567,15 +567,15 @@ impl<W: Write> Writer<W> {
|
|||
self.write_tag_header(tag_code, length as u32)?;
|
||||
self.write_character_id(tag.id)?;
|
||||
let format_id = match tag.format {
|
||||
BitmapFormat::ColorMap8 => 3,
|
||||
BitmapFormat::ColorMap8 { .. } => 3,
|
||||
BitmapFormat::Rgb15 => 4,
|
||||
BitmapFormat::Rgb32 => 5,
|
||||
};
|
||||
self.write_u8(format_id)?;
|
||||
self.write_u16(tag.width)?;
|
||||
self.write_u16(tag.height)?;
|
||||
if tag.format == BitmapFormat::ColorMap8 {
|
||||
self.write_u8(tag.num_colors)?;
|
||||
if let BitmapFormat::ColorMap8 { num_colors } = tag.format {
|
||||
self.write_u8(num_colors)?;
|
||||
}
|
||||
self.output.write_all(tag.data)?;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue