Use extend_from_slice in fctl_data & output
This commit is contained in:
parent
58eec39cc8
commit
0b68c08852
2 changed files with 20 additions and 25 deletions
23
src/apng.rs
23
src/apng.rs
|
|
@ -1,5 +1,3 @@
|
|||
use std::io::Write;
|
||||
|
||||
use crate::{
|
||||
PngResult,
|
||||
error::PngError,
|
||||
|
|
@ -52,15 +50,14 @@ impl Frame {
|
|||
#[must_use]
|
||||
pub fn fctl_data(&self, sequence_number: u32) -> Vec<u8> {
|
||||
let mut byte_data = Vec::with_capacity(26);
|
||||
byte_data.write_all(&sequence_number.to_be_bytes()).unwrap();
|
||||
byte_data.write_all(&self.width.to_be_bytes()).unwrap();
|
||||
byte_data.write_all(&self.height.to_be_bytes()).unwrap();
|
||||
byte_data.write_all(&self.x_offset.to_be_bytes()).unwrap();
|
||||
byte_data.write_all(&self.y_offset.to_be_bytes()).unwrap();
|
||||
byte_data.write_all(&self.delay_num.to_be_bytes()).unwrap();
|
||||
byte_data.write_all(&self.delay_den.to_be_bytes()).unwrap();
|
||||
byte_data.push(self.dispose_op);
|
||||
byte_data.push(self.blend_op);
|
||||
byte_data.extend_from_slice(&sequence_number.to_be_bytes());
|
||||
byte_data.extend_from_slice(&self.width.to_be_bytes());
|
||||
byte_data.extend_from_slice(&self.height.to_be_bytes());
|
||||
byte_data.extend_from_slice(&self.x_offset.to_be_bytes());
|
||||
byte_data.extend_from_slice(&self.y_offset.to_be_bytes());
|
||||
byte_data.extend_from_slice(&self.delay_num.to_be_bytes());
|
||||
byte_data.extend_from_slice(&self.delay_den.to_be_bytes());
|
||||
byte_data.extend_from_slice(&[self.dispose_op, self.blend_op]);
|
||||
byte_data
|
||||
}
|
||||
|
||||
|
|
@ -68,8 +65,8 @@ impl Frame {
|
|||
#[must_use]
|
||||
pub fn fdat_data(&self, sequence_number: u32) -> Vec<u8> {
|
||||
let mut byte_data = Vec::with_capacity(4 + self.data.len());
|
||||
byte_data.write_all(&sequence_number.to_be_bytes()).unwrap();
|
||||
byte_data.write_all(&self.data).unwrap();
|
||||
byte_data.extend_from_slice(&sequence_number.to_be_bytes());
|
||||
byte_data.extend_from_slice(&self.data);
|
||||
byte_data
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
use std::{fs, io::Write, path::Path, sync::Arc};
|
||||
use std::{fs, path::Path, sync::Arc};
|
||||
|
||||
use bitvec::bitarr;
|
||||
use libdeflater::{CompressionLvl, Compressor};
|
||||
|
|
@ -165,17 +165,15 @@ impl PngData {
|
|||
let mut output = vec![0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A];
|
||||
// IHDR
|
||||
let mut ihdr_data = Vec::with_capacity(13);
|
||||
ihdr_data.write_all(&self.raw.ihdr.width.to_be_bytes()).ok();
|
||||
ihdr_data
|
||||
.write_all(&self.raw.ihdr.height.to_be_bytes())
|
||||
.ok();
|
||||
ihdr_data.write_all(&[self.raw.ihdr.bit_depth as u8]).ok();
|
||||
ihdr_data
|
||||
.write_all(&[self.raw.ihdr.color_type.png_header_code()])
|
||||
.ok();
|
||||
ihdr_data.write_all(&[0]).ok(); // Compression -- deflate
|
||||
ihdr_data.write_all(&[0]).ok(); // Filter method -- 5-way adaptive filtering
|
||||
ihdr_data.write_all(&[self.raw.ihdr.interlaced as u8]).ok();
|
||||
ihdr_data.extend_from_slice(&self.raw.ihdr.width.to_be_bytes());
|
||||
ihdr_data.extend_from_slice(&self.raw.ihdr.height.to_be_bytes());
|
||||
ihdr_data.extend_from_slice(&[self.raw.ihdr.bit_depth as u8]);
|
||||
ihdr_data.extend_from_slice(&[
|
||||
self.raw.ihdr.color_type.png_header_code(),
|
||||
0, // Compression -- deflate
|
||||
0, // Filter method -- 5-way adaptive filtering
|
||||
self.raw.ihdr.interlaced as u8,
|
||||
]);
|
||||
write_png_block(b"IHDR", &ihdr_data, &mut output);
|
||||
// Ancillary chunks - split into those that come before IDAT and those that come after
|
||||
let mut aux_split = self.aux_chunks.split(|c| &c.name == b"IDAT");
|
||||
|
|
|
|||
Loading…
Reference in a new issue