extern "C" _declspec(dllexport) bool __stdcall SaveImage2(const char* srcImage, const char* json, bool transparent) { CxImage image; if (!image.Load(srcImage, CXIMAGE_FORMAT_TIF)) return false; neb::CJsonObject oJson(json); int count = oJson.GetArraySize(); for (int i = 0; i < count; i++) { int left, top, width, height; string path; oJson[i]["Region"].Get("Left", left); oJson[i]["Region"].Get("Top", top); oJson[i]["Region"].Get("Width", width); oJson[i]["Region"].Get("Height", height); oJson[i].Get("Path", path); int imageWidth = image.GetWidth(); if (width > imageWidth - left) width = imageWidth - left; int imageHeight = image.GetHeight(); if (height > imageHeight - top) height = imageHeight - top; CxImage subImage(imageWidth, imageHeight); RECT r; r.left = left; r.right = left + width; r.top = top; r.bottom = top + height; if (!image.Crop(r, &subImage)) return false; if (transparent) { if (subImage.GetTransIndex() != 24) { subImage.IncreaseBpp(24); } subImage.SetTransIndex(0); int B = 255, G = 255, R = 255; RGBQUAD rgbTrans = { B, G, R, 0 }; subImage.SetTransColor(rgbTrans); } if (!subImage.Save(path.c_str(), CXIMAGE_FORMAT_GIF)) return false; } return true; }