00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #ifdef HAVE_CONFIG_H
00023 #include <config.h>
00024 #endif
00025
00026
00027
00028
00029 #include <cpl.h>
00030 #include "muse_mask.h"
00031 #include "muse_utils.h"
00032
00036
00049
00050 muse_mask *
00051 muse_mask_new(void)
00052 {
00053 return (muse_mask *)cpl_calloc(1, sizeof(muse_mask));
00054 }
00055
00056
00066
00067 void
00068 muse_mask_delete(muse_mask *aMask)
00069 {
00070 if (aMask != NULL) {
00071 cpl_mask_delete(aMask->mask);
00072 cpl_propertylist_delete(aMask->header);
00073 cpl_free(aMask);
00074 }
00075 }
00076
00077
00089
00090 muse_mask *muse_mask_load(const char *aFilename)
00091 {
00092 muse_mask *mask = muse_mask_new();
00093 if (mask == NULL) {
00094 return NULL;
00095 }
00096
00097 mask->header = cpl_propertylist_load(aFilename, 0);
00098 if (!mask->header) {
00099 cpl_msg_error(__func__, "Loading \"%s\" failed: %s", aFilename,
00100 cpl_error_get_message());
00101 muse_mask_delete(mask);
00102 return NULL;
00103 }
00104
00105 mask->mask = cpl_mask_load(aFilename, 0, 0);
00106 if (mask->mask == NULL) {
00107 cpl_msg_error(__func__, "Could not load mask from %s: %s",
00108 aFilename, cpl_error_get_message());
00109 muse_mask_delete(mask);
00110 cpl_error_set(__func__, MUSE_ERROR_READ_DATA);
00111 return NULL;
00112 }
00113
00114 return mask;
00115 }
00116
00117
00129
00130
00131 cpl_error_code muse_mask_save(muse_mask *aMask, const char *aFilename)
00132 {
00133 cpl_ensure_code(aMask && aFilename, CPL_ERROR_NULL_INPUT);
00134
00135 cpl_image *image = cpl_image_new_from_mask(aMask->mask);
00136 cpl_error_code err = cpl_image_save(image, aFilename, CPL_TYPE_UNSPECIFIED,
00137 aMask->header, CPL_IO_CREATE);
00138 cpl_image_delete(image);
00139
00140 if (err != CPL_ERROR_NONE) {
00141 cpl_msg_error(__func__, "Could not save mask %s: %s",
00142 aFilename, cpl_error_get_message());
00143 return err;
00144 }
00145
00146 return CPL_ERROR_NONE;
00147 }
00148
00149