57 lines
2.8 KiB
C
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
|