commit c00075d
uint
·
2026-08-07 18:09:53 +0000 UTC
parent 27086f6
PNG: Add creating and loading PNG binary into buffer
2 files changed,
+67,
-0
+23,
-0
1@@ -0,0 +1,23 @@
2+#ifndef ULEPNG_H
3+#define ULEPNG_H
4+
5+#include <stddef.h>
6+
7+typedef enum {
8+ ULEPNG_ERR_NONE,
9+ ULEPNG_ERR_OOM, /* Out of memory */
10+
11+ ULEPNG_ERR_LAST
12+} UlePNGErr;
13+
14+typedef struct {
15+ unsigned char* data;
16+ size_t size;
17+ UlePNGErr err;
18+} ulepng;
19+
20+ulepng* ulepng_init(void);
21+ulepng* ulepng_load_file(const char* path);
22+
23+#endif /* ULEPNG_H */
24+
+44,
-0
1@@ -0,0 +1,44 @@
2+#include <stdio.h>
3+#include <stdlib.h>
4+
5+#include "ulepng.h"
6+
7+ulepng* ulepng_init(void)
8+{
9+ ulepng* png = malloc(sizeof(ulepng));
10+ if (png == NULL)
11+ return NULL;
12+
13+ png->data = NULL;
14+ png->size = 0;
15+
16+ return png;
17+}
18+
19+ulepng* ulepng_load_file(const char* path)
20+{
21+ ulepng* png = ulepng_init();
22+ FILE* file = NULL;
23+
24+ file = fopen(path, "rb");
25+ if (file == NULL)
26+ return NULL;
27+
28+ /* get file size */
29+ fseek(file, 0L, SEEK_END);
30+ png->size = ftell(file);
31+ rewind(file);
32+
33+ png->data = malloc(png->size);
34+ if (png->data == NULL) {
35+ png->err = ULEPNG_ERR_OOM;
36+ goto cleanup;
37+ }
38+
39+ fread(png->data, 1, png->size, file);
40+
41+cleanup:
42+ fclose(file);
43+ return png;
44+}
45+