cximage库切割crop图片

在我的任务中,需要对cximage中的图片按照固定方格大小进行切分,找到crop函数,代码实现如下:

    CString strname;
    RECT r;
    int w = 200;
    int h = 250;

    r.left = 10;
    r.top = 10;

    CxImage orgimage(buf, size, CXIMAGE_FORMAT_BMP);   // 定义一个CxImage对象   
    CxImage image;
   
    for(int i = 0; i < 2; ++ i)
    {
        r.left = 10;
       
        for(int j = 0; j < 2; ++ j)
        {
            strname.Format(L"crop%d%d.bmp", i, j);
            r.left =10 + j * w;
            r.top = 10 + i * h;
            r.right = r.left + w;
            r.bottom = r.top + h;


            orgimage.Crop(r, &image);
            ...

     ...

实测后发现确实将一个图片切割成4张小图片,用画图工具,将4副图片能合并成原来的图片。

这里注意的是,orgimage.Crop(r, &image);其中image对象只创建一个,避免多次重复创建切割图片的cximage对象。另外一个接口是image=orgimage.Crop(r),跟进代码中发现这个接口里直接修改了当前的cximage对象,这样的话,就需要每次对orgimage构造一个新的image对象,这样的话,会造成效率低(个人感觉,:P)。

 

第二个任务是:对每次生成的图片需要过滤,即图片仅仅是背景色的,不需要重新切割并生成文件了。

做个重载函数crop,加入crback颜色值参数,仅仅对24位色图片处理,部分处理代码

            int nEqualNum = 0;
            int num = 0;
            for(long y=starty; y<endy; y++){
                info.nProgress = (long)(100*(y-starty)/(endy-starty)); //<Anatoly Ivasyuk>

                num = linelen / 3;
                for(int k = 0; k < num; ++ k)
                {
                    // 相同,则累加个数
                    if(memcmp(pSrc + k * 3, backColor, 3) == 0){
                        ++ nEqualNum;
                    }
                }
                               
                memcpy(pDest,pSrc,linelen);
                pDest+=tmp.info.dwEffWidth;
                pSrc+=info.dwEffWidth;
            }

            // 如果相同点个数大于99.9%,则返回不进行处理
            double rato = (double(nEqualNum) / (double(endy - starty) * num)) * 100.0;
            if(rato > 99.99)
            {
                return false;
            }

 

这里对背景色占总像素比例判断,认为如果大于99.99的话,则认为基本就是纯背景的图片了。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值