PNGImage *PNGImage_newWithPath_(char *path) { PNGImage *self = PNGImage_new(); PNGImage_path_(self, path); PNGImage_load(self); return self; }
void Image_save(Image *self) { //Image_flipY(self); if (strcmp(self->fileType, "png")==0) { PNGImage *image = PNGImage_new(); PNGImage_setExternalUArray_(image, self->byteArray); PNGImage_path_(image, self->path); PNGImage_width_(image, self->width); PNGImage_height_(image, self->height); PNGImage_components_(image, Image_componentCount(self)); PNGImage_save(image); Image_error_(self, PNGImage_error(image)); PNGImage_free(image); } else if (strcmp(self->fileType, "jpg")==0) { JPGImage *image = JPGImage_new(); JPGImage_setExternalUArray_(image, self->byteArray); JPGImage_path_(image, self->path); JPGImage_quality_(image, self->encodingQuality); JPGImage_width_(image, self->width); JPGImage_height_(image, self->height); if (Image_isRGBA8(self)) { Image_removeAlpha(self); } if (!Image_isRGB8(self)) { Image_error_(self, "can only save RGB images to JPEG"); return; } JPGImage_components_(image, Image_componentCount(self)); JPGImage_save(image); Image_error_(self, JPGImage_error(image)); JPGImage_free(image); } else if (strcmp(self->fileType, "tiff")==0 || strcmp(self->fileType, "tif")==0) { TIFFImage *image = TIFFImage_new(); TIFFImage_setExternalUArray_(image, self->byteArray); TIFFImage_path_(image, self->path); TIFFImage_width_(image, self->width); TIFFImage_height_(image, self->height); TIFFImage_components_(image, Image_componentCount(self)); TIFFImage_save(image); Image_error_(self, TIFFImage_error(image)); TIFFImage_free(image); } else { Image_error_(self, "unknown file type"); } //Image_flipY(self); }
PNGImage *PNGImage_new(void) { PNGImage *self = (PNGImage *)calloc(1, sizeof(PNGImage)); PNGImage_path_(self, ""); PNGImage_error_(self, ""); self->byteArray = UArray_new(); self->ownsBuffer = 1; return self; }
void Image_load(Image *self) { if (strcmp(self->fileType, "png")==0) { PNGImage *image = PNGImage_new(); PNGImage_setExternalUArray_(image, self->byteArray); PNGImage_path_(image, self->path); PNGImage_load(image); Image_error_(self, PNGImage_error(image)); self->width = PNGImage_width(image); self->height = PNGImage_height(image); self->componentCount = PNGImage_components(image); PNGImage_free(image); } else if (strcmp(self->fileType, "jpg")==0) { JPGImage *image = JPGImage_new(); JPGImage_setExternalUArray_(image, self->byteArray); JPGImage_path_(image, self->path); JPGImage_decodingWidthHint_(image, self->decodingWidthHint); JPGImage_decodingHeightHint_(image, self->decodingHeightHint); JPGImage_load(image); Image_error_(self, JPGImage_error(image)); self->width = JPGImage_width(image); self->height = JPGImage_height(image); self->componentCount = JPGImage_components(image); JPGImage_free(image); } else if (strcmp(self->fileType, "tif")==0 || strcmp(self->fileType, "tiff")==0) { TIFFImage *image = TIFFImage_new(); TIFFImage_setExternalUArray_(image, self->byteArray); TIFFImage_path_(image, self->path); TIFFImage_load(image); Image_error_(self, TIFFImage_error(image)); self->width = TIFFImage_width(image); self->height = TIFFImage_height(image); self->componentCount = TIFFImage_components(image); TIFFImage_free(image); } else { Image_error_(self, "unknown file type"); } if (UArray_size(self->byteArray) == 0) { Image_error_(self, "error reading file"); } Image_makeRGBA(self); }