use std::io::{BufWriter, Write, Result}; use crate::types_defined::Color; pub struct PPMWriter { writter: BufWriter } impl PPMWriter { /// 创建新的 PPM 写入器 /// /// 参数: /// writer: 实现 Write 的目标 /// width: 图像宽度 /// height: 图像高度 pub fn new(mut inner: W, width: i32, height: i32) -> Result { // 写入 PPM 头 (P6 二进制格式) let header = format!("P6\n{} {}\n255\n", width, height); inner.write_all(header.as_bytes())?; Ok(PPMWriter { writter: BufWriter::new(inner) }) } /// 写入单个像素 (高性能实现) #[inline] pub fn write(&mut self, color: Color) -> Result<()> { // 直接写入字节数组避免额外内存分配 let bytes = [color.x as u8, color.y as u8, color.z as u8]; self.writter.write_all(&bytes) } /// 完成写入并刷新缓冲区 pub fn finish(mut self) -> Result<()> { self.writter.flush() } }