24小时热门版块排行榜    

Znn3bq.jpeg
汕头大学海洋科学接受调剂
查看: 2471  |  回复: 21

霸王晓

金虫 (著名写手)


[交流] MFC 单文档实现图像缩放

各位大哥,大姐,刚学VS2010,大概这样的,我想在工具栏上加两个按钮,一个实现图像放大,一个实现图像缩小,按钮有了,图像缩放的代码是啥啊?希望能赐教啊。
回复此楼

» 猜你喜欢

» 本主题相关价值贴推荐,对您同样有帮助:

» 抢金币啦!回帖就可以得到:

查看全部散金贴

已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
回帖置顶 ( 共有9个 )

denghblzu9237

银虫 (正式写手)


★ ★ ★
霸王晓(金币+1): 谢谢参与
conanwj: 金币+2, 应助指数+1, 感谢应助 2012-07-31 23:02:42
简单的缩放方法是 线性插值,但是锯齿效应比较明显,优点是计算速度快;
还有一个双线性插值,比线性插值要好,但是速度要稍微慢一些。
还有更加复杂的,像双三次插值,基于保护边缘的Bresenham插值等等。
最实用的还是双线性插值,下面是以前我写的代码,你可以参考一下:

/***********************************************
* 函数功能:实现图像的缩放功能
* 输入参数:输入原始图像   unsigned char *pSrcImg
*           原始图像的宽度 int            SrcWid  列 对应坐标J  SrcJ
*           原始图像的高度 int            SrcHgh  行 对应坐标I  SrcI
*           输出缩放图像   unsigned char *pDstImg
*           缩放图像的宽度 int            DstWid
*           缩放图像的高度 int            DstHgh
* 返 回 值:函数运行成功   0
*           函数运行失败   -1
***********************************************/
int biLinear(unsigned char *pSrcImg,
             int            SrcWid,
             int            SrcHgh,
             unsigned char *pDstImg,
             int            DstWid,
             int            DstHgh)
{
    /*********************************************************
     *        需要注意的事情:
     *   1.卷积时对边界的处理,同时还要注意与MATLAB的坐标区别
     *   2.防止出现溢出,像素类型为unsigned char,防止存储超过255的值
     ********************************************************/
    float HghExp,  WidExp ;    // 保存行列的缩放值
    int   Si,      Sj     ;    // 保存映射整数坐标
    float p,       q      ;    // 保存映射小数坐标
    int   s1, s2, s3, s4;
    int   i, j, flag;

    if((NULL ==pSrcImg) || (NULL == pDstImg) || (SrcWid < 1) || (SrcHgh <1) || (DstWid < 1) || (DstHgh < 1))
    {
        return -1;
    }

    // 计算缩放比例
    HghExp  = float(DstHgh) / float(SrcHgh);   
    WidExp  = float(DstWid) / float(SrcWid);

    // 插值公式:pDstImg(i,j) =   (1 - p) * (1 - q) * pSrcImg(Si,     Sj    )
    //                          + (1 - p) *  q      * pSrcImg(Si + 1, Sj    )
    //                          +       p * (1 - q) * pSrcImg(Si,     Sj + 1)  
    //                          +       p *  q      * pSrcImg(Si + 1, Sj + 1);
    for(i = 1 ; i < DstHgh-1; i++)
    {
        for(j = 1; j < DstWid-1 ; j++)
                {
             Si = int(i / HghExp);
             Sj = int(j / WidExp);
             p  = i / HghExp - Si;
             q  = j / WidExp - Sj;

             s1 = pSrcImg[(Si)*SrcWid + Sj  ];               // pSrcImg(Si, Sj)
             s2 = pSrcImg[(Si + 1)*SrcWid + Sj ];            // pSrcImg(Si + 1, Sj)
             s3 = pSrcImg[(Si )*SrcWid + Sj+ 1 ];            // pSrcImg(Si, Sj + 1)
             s4 = pSrcImg[(Si+ 1 )  *SrcWid + Sj+ 1 ];       // pSrcImg(Si + 1, Sj + 1)
             flag = int((1-p)*(1-q)*s1 + (1-p)*q*s2 + p*(1-q)*s3 + p*q * s4 + 0.5);
             pDstImg[i*DstWid + j] = (flag > 255)? 255:  flag;   // 防止溢出
                }
    }

    return 0;
}

[ Last edited by denghblzu9237 on 2012-7-31 at 18:53 ]
2楼2012-07-31 18:52:00
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

霸王晓

金虫 (著名写手)


引用回帖:
2楼: Originally posted by denghblzu9237 at 2012-07-31 18:52:00
简单的缩放方法是 线性插值,但是锯齿效应比较明显,优点是计算速度快;
还有一个双线性插值,比线性插值要好,但是速度要稍微慢一些。
还有更加复杂的,像双三次插值,基于保护边缘的Bresenham插值等等。
最实用 ...

谢谢,要是BMP图像格式 照样适用吗?
3楼2012-07-31 19:27:38
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

kk_2010

木虫 (正式写手)



霸王晓(金币+1): 谢谢参与
Visual C++数字图像处理(第二版)光盘(何斌)
4楼2012-07-31 19:33:20
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

filion

金虫 (正式写手)



霸王晓(金币+1): 谢谢参与
不用插值那么麻烦吧?
我记得CDC类中播放图片的函数,可以设置长宽吧。具体我不太记得了,自己查查吧
5楼2012-07-31 19:41:44
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

youth0826

至尊木虫 (著名写手)



霸王晓(金币+1): 谢谢参与
如果带opencv的话,直接用函数就行了
6楼2012-07-31 23:25:55
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

lauysche

禁虫 (著名写手)


霸王晓(金币+1): 谢谢参与
本帖内容被屏蔽

» 本帖已获得的红花(最新10朵)

10楼2012-08-01 08:27:34
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

霸王晓

金虫 (著名写手)


送鲜花一朵
引用回帖:
10楼: Originally posted by lauysche at 2012-08-01 08:27:34
看回帖  短消息  送红

什么意思?您是不是会啊?可以和我说吗?
11楼2012-08-01 08:32:36
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

Guzenyel

木虫 (小有名气)



霸王晓(金币+1): 谢谢参与
纯显示的话不需要插值这么麻烦的啊,在OnDraw函数里画BMP图的时候,那个函数有两个个参数就是控制放大缩小比例的
16楼2012-08-03 15:03:25
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

mnj4

铜虫 (初入文坛)



霸王晓(金币+1): 谢谢参与
直接调用函数即可。
17楼2012-08-03 16:39:01
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

至上励合

木虫 (小有名气)



霸王晓(金币+1): 谢谢参与
不错哦~
15楼2012-08-01 13:08:33
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

swordtao

铁杆木虫 (正式写手)



霸王晓(金币+1): 谢谢参与
16楼正解
19楼2012-08-06 09:47:06
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
简单回复
2009126227楼
2012-08-01 08:13   回复  
霸王晓(金币+1): 谢谢参与
祝福
2012-08-01 08:19   回复  
霸王晓(金币+1): 谢谢参与
祝福
2012-08-01 08:26   回复  
霸王晓(金币+1): 谢谢参与
youdao112楼
2012-08-01 08:38   回复  
霸王晓(金币+1): 谢谢参与
wendy313楼
2012-08-01 08:46   回复  
霸王晓(金币+1): 谢谢参与
stary-198214楼
2012-08-01 08:51   回复  
霸王晓(金币+1): 谢谢参与
2012-08-04 21:37   回复  
霸王晓(金币+1): 谢谢参与
祝福!
2012-08-06 09:54   回复  
霸王晓(金币+1): 谢谢参与
2012-12-30 07:17   回复  
霸王晓(金币+1): 谢谢参与
su-b0822楼
2012-12-30 15:18   回复  
相关版块跳转 我要订阅楼主 霸王晓 的主题更新
普通表情 高级回复 (可上传附件)
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[考研] 求调剂推荐 +5 小聂爱学习 2026-04-14 5/250 2026-04-15 09:01 by blunt110
[考研] 271求调剂 +35 2261744733 2026-04-11 41/2050 2026-04-14 15:36 by zs92450
[考研] 求调剂 +20 MAX怅惘 2026-04-09 22/1100 2026-04-14 14:57 by 独醉梦孤城
[基金申请] RY:中国产出的科学垃圾论文,绝对数量和比例都世界第一 +6 zju2000 2026-04-14 17/850 2026-04-14 14:34 by jurkat.1640
[考研] 305求调剂 +8 玛卡巴卡boom 2026-04-11 8/400 2026-04-14 09:04 by pengliang8036
[考研] 求调剂,985材料与化工348分 +9 涵竹刘 2026-04-11 14/700 2026-04-13 22:26 by 涵竹刘
[考研] 2026硕士调剂_能动_河南农业大学 +4 河南农业大学-能 2026-04-12 4/200 2026-04-13 22:01 by bljnqdcc
[基金申请] 2026 WR青拔 +3 冬日阳光CAS 2026-04-09 6/300 2026-04-13 18:40 by liuchb715
[考研] 求调剂288 +7 ioodiiij 2026-04-10 9/450 2026-04-13 08:33 by Hayaay
[考研] 0854调剂 +12 长弓傲 2026-04-09 13/650 2026-04-12 09:56 by 逆水乘风
[考研] 307求调剂 +10 tzq94092 2026-04-10 10/500 2026-04-12 08:18 by wise999
[考研] 求调剂 +3 胃痉挛累了 2026-04-11 5/250 2026-04-11 14:13 by luhong1990
[考研] 282,求调剂 +12 jggshjkkm 2026-04-09 14/700 2026-04-11 09:39 by 猪会飞
[考研] 化学工程与技术324调剂 +23 孙常华 2026-04-09 25/1250 2026-04-11 00:07 by 骑牛渡寒江
[考研] 吉大计算机技术331分,英语六级,求调剂 +3 峰峰021116 2026-04-09 3/150 2026-04-10 20:01 by chemisry
[考研] 314求调剂 +18 xhhdjdjsjks 2026-04-09 19/950 2026-04-10 18:53 by HPUCZ
[考研] 本科211 工科085400 280分求调剂 可跨专业 +3 LZH(等待调剂中 2026-04-09 3/150 2026-04-09 21:29 by wutongshun
[考研] 材料专硕(0856) 339分求调剂 +9 哈哈哈鹅哈哈哈 2026-04-09 10/500 2026-04-09 20:01 by Orcid
[考研] 085801 总分275 本科新能源 求调剂 +8 bradoner 2026-04-08 9/450 2026-04-09 13:43 by only周
[考研] 二次调剂求老师收留 +3 笑笑袁 2026-04-08 3/150 2026-04-08 23:50 by 醉在风里
信息提示
请填处理意见