/* Archivos: proyectos .tgb, importación de imágenes y exportación. * Toda lectura valida el contenido y devuelve errores con mensaje claro * (tgb_last_error). Todo guardado es atómico: se escribe un temporal en la * misma carpeta y se reemplaza el destino solo si todo salió bien. */ #ifndef TAHGIBU_IO_H #define TAHGIBU_IO_H #include "tahgibu/document.h" #ifdef __cplusplus extern "C" { #endif #define TGB_MAX_FILE_BYTES (512u * 1024u * 1024u) /* tamaño máximo de un .tgb */ #define TGB_MAX_PIXEL_MEMORY ((size_t)2048u * 1024u * 1024u) /* memoria máxima de píxeles al cargar */ tgb_status tgb_document_load(tgb_context *ctx, const char *path, tgb_document **out); tgb_status tgb_document_load_memory(tgb_context *ctx, const uint8_t *data, size_t len, tgb_document **out); typedef struct tgb_save_options { bool include_flat_frames; /* true: añade "frames" aplanados para lectores del formato 2 */ bool legacy_v2; /* true: escribe formato 2 (una imagen por fotograma, SIN capas ni puntos de recuperación: se pierde información) */ } tgb_save_options; void tgb_save_options_defaults(tgb_save_options *opts); /* include_flat_frames=true */ /* path NULL = usar la ruta asociada al documento. Tras guardar bien, asocia * la ruta y marca el documento como guardado (salvo en modo legacy_v2). */ tgb_status tgb_document_save(tgb_document *doc, const char *path, const tgb_save_options *opts); /* Serializa a memoria; libera *out_data con tgb_free. No cambia el estado del documento. */ tgb_status tgb_document_save_memory(const tgb_document *doc, const tgb_save_options *opts, uint8_t **out_data, size_t *out_len); void tgb_free(void *p); /* PNG (8 bits RGBA al escribir; al leer: 8/16 bits, gris/RGB/paleta/+alfa, * sin entrelazado). */ tgb_status tgb_png_decode_memory(const uint8_t *data, size_t len, tgb_canvas **out); tgb_status tgb_png_encode_memory(const tgb_canvas *canvas, uint8_t **out_data, size_t *out_len); /* Importa un PNG como NUEVO fotograma en frame_index, dibujado en la capa * layer_index (centrado; se recorta si es mayor que el documento). Una sola * operación deshacible. */ tgb_status tgb_import_png(tgb_document *doc, const char *path, size_t frame_index, size_t layer_index, uint32_t *out_frame_id); /* Exporta un fotograma aplanado a PNG. */ tgb_status tgb_export_png(const tgb_document *doc, size_t frame_index, const char *path); /* Exporta todos los fotogramas: /_0001.png ... */ tgb_status tgb_export_png_sequence(const tgb_document *doc, const char *dir, const char *prefix); /* Exporta una animación APNG (PNG animado) respetando la duración de cada fotograma. */ tgb_status tgb_export_apng(const tgb_document *doc, const char *path); #ifdef __cplusplus } #endif #endif