int main (int argc, char **argv) { psd_context * context = NULL; psd_status status; if(argc <= 1) return -1; // parse the psd file to psd_context status = psd_image_load(&context, argv[1]); // use it... // // free if it's done psd_image_free(context); return (status == psd_status_done ? 0 : -1); }
Document * PsdParser::parse() { psd_status status = psd_image_load(&context_, (psd_char *)filename_); if (status != psd_status_done) { // Failed to load the file return NULL; } Document *doc = new Document(filename_, context_->width, context_->height); reset_layer_index(); parse_psd(doc); psd_image_free(context_); context_ = NULL; return doc; }
static psd_status psd_image_load_tag(psd_context ** dst_context, psd_char * file_name, psd_load_tag load_tag) { psd_context * context; psd_status status; if(dst_context == NULL) return psd_status_invalid_context; if(file_name == NULL) return psd_status_invalid_file; context = (psd_context *)psd_malloc(sizeof(psd_context)); if(context == NULL) return psd_status_malloc_failed; memset(context, 0, sizeof(psd_context)); context->ops_ = &psd_std_fileops; context->file_name = file_name; context->file = psd_fopen(file_name); if (context->file == NULL) { psd_free(context); return psd_status_invalid_file; } context->state = PSD_FILE_HEADER; context->stream.file_length = psd_fsize(context->file); context->load_tag = load_tag; status = psd_main_loop(context); if(status != psd_status_done) { psd_image_free(context); context = NULL; } else { psd_stream_free(context); } *dst_context = context; return status; }
/** * デストラクタ */ ~PSD() { if (context) { psd_image_free(context); } };