cximage 裁剪图片并背景透明

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;
}

 

posted on 2021-01-28 16:42  空明流光  阅读(351)  评论(0编辑  收藏  举报

导航