33 #define DEFAULT_ALIGNMENT_U8X4 64 44 if ((stride % alignment) != 0)
45 stride += alignment - (stride % alignment);
47 uint8_t *buf = calloc(height*stride,
sizeof(uint8_t));
50 image_u8x4_t tmp = { .
width = width, .height = height, .stride = stride, .buf = buf };
59 uint8_t *buf = malloc(in->
height*in->
stride*
sizeof(uint8_t));
88 for (
int y = 0; y < pam->
height; y++) {
89 if (pam->
depth == 1) {
90 for (
int x = 0; x < pam->
width; x++) {
96 }
else if (pam->
depth == 3) {
97 for (
int x = 0; x < pam->
width; x++) {
103 }
else if (pam->
depth == 4) {
133 for (
int y = 0; y < im.
height; y++) {
134 for (
int x = 0; x < im.
width; x++) {
135 uint8_t gray = pnm.
buf[y*pnm.
width + x];
153 for (
int y = 0; y < im.
height; y++) {
154 for (
int x = 0; x < im.
width; x++) {
156 uint8_t r = pnm.
buf[y*pnm.
width*3 + 3*x + 0];
157 uint8_t g = pnm.
buf[y*pnm.
width*3 + 3*x + 1];
158 uint8_t b = pnm.
buf[y*pnm.
width*3 + 3*x + 2];
180 FILE *f = fopen(path,
"wb");
189 fprintf(f,
"P6\n%d %d\n255\n", im.
width, im.
height);
191 for (
int y = im.
height-1; y >= 0; y--) {
192 for (
int x = 0; x < im.
width; x++) {
194 uint8_t r = im.
buf[y*im.
stride + 4*x + 0];
195 uint8_t g = im.
buf[y*im.
stride + 4*x + 1];
196 uint8_t b = im.
buf[y*im.
stride + 4*x + 2];
213 FILE *f = fopen(path,
"w");
215 fprintf(f,
"WIDTH %d\n", im->
width);
216 fprintf(f,
"HEIGHT %d\n", im->
height);
217 fprintf(f,
"DEPTH 4\n");
218 fprintf(f,
"MAXVAL 255\n");
219 fprintf(f,
"TUPLTYPE RGB_ALPHA\n");
220 fprintf(f,
"ENDHDR\n");
222 for (
int y = 0; y < im->
height; y++)
image_u8x4_t * image_u8x4_copy(const image_u8x4_t *in)
image_u8x4_t * image_u8x4_create_alignment(unsigned int width, unsigned int height, unsigned int alignment)
void image_u8x4_destroy(image_u8x4_t *im)
void image_u8x4_write_pam(const image_u8x4_t *im, const char *path)
image_u8x4_t * image_u8x4_create_from_pnm(const char *path)
pam_t * pam_create_from_file(const char *inpath)
#define DEFAULT_ALIGNMENT_U8X4
image_u8x4_t * image_u8x4_create(unsigned int width, unsigned int height)
int image_u8x4_write_pnm(const image_u8x4_t *imp, const char *path)
pnm_t * pnm_create_from_file(const char *path)
void pnm_destroy(pnm_t *pnm)
void pam_destroy(pam_t *pam)
static TTYPENAME *TFN() copy(TTYPENAME *hash)
image_u8x4_t * image_u8x4_create_from_pam(const char *inpath)