Add support to import softpal pgd image as normal ge image

This commit is contained in:
2025-12-11 15:39:14 +08:00
parent cf677dc786
commit 3c49e9a991

View File

@@ -65,6 +65,7 @@ pub struct Pgd3 {
base_header: PgdGeHeader,
base: ImageData,
diff: ImageData,
fake_compress: bool,
}
impl Pgd3 {
@@ -72,7 +73,7 @@ impl Pgd3 {
mut reader: R,
filename: &str,
encoding: Encoding,
_config: &ExtraConfig,
config: &ExtraConfig,
archive: Option<&Box<dyn Script>>,
) -> Result<Self> {
let mut sig = [0u8; 4];
@@ -110,6 +111,7 @@ impl Pgd3 {
base_header,
base,
diff,
fake_compress: config.pgd_fake_compress,
})
}
}
@@ -147,6 +149,44 @@ impl Script for Pgd3 {
)?;
Ok(base)
}
fn import_image<'a>(
&'a self,
data: ImageData,
mut file: Box<dyn WriteSeek + 'a>,
) -> Result<()> {
let mut header = PgdGeHeader {
offset_x: self.base_header.offset_x,
offset_y: self.base_header.offset_y,
width: self.base_header.width,
height: self.base_header.height,
canvas_height: self.base_header.canvas_height,
canvas_width: self.base_header.canvas_width,
mode: self.base_header.mode,
_unk: self.base_header._unk,
};
if data.height != header.height {
return Err(anyhow::anyhow!(
"Image height does not match: expected {}, got {}",
header.height,
data.height
));
}
if data.width != header.width {
return Err(anyhow::anyhow!(
"Image width does not match: expected {}, got {}",
header.width,
data.width
));
}
header.mode = 3;
file.write_all(b"GE \0")?;
header.pack(&mut file, false, Encoding::Utf8)?;
PgdWriter::new(data, self.fake_compress)
.with_method(3)
.pack_ge(&mut file)?;
Ok(())
}
}
fn draw_on_img(base: &mut ImageData, diff: &ImageData, left: u32, top: u32) -> Result<()> {