Files
2026-10-24 12:01:52 -03:00

57 lines
2.8 KiB
C

/* 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: <dir>/<prefix>_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