QQ登录

只需一步,快速开始

登录 | 立即注册 | 找回密码
查看: 2939|回复: 5

图像滤镜---球面(Spherize)滤镜

[复制链接]
  • ta_mind
    开心
    2015-9-28 22:37
  • classn_01: 31 classn_02

    [LV.5]常住居民I

    56

    主题

    63

    帖子

    1369

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    1369
    发表于 2015-7-22 09:57:05 | 显示全部楼层 |阅读模式
    本代码包含C#/C两个版本,C#为开源代码,C版本代码仅供测试,如需要C版本源码,请联系本站管理员,本站C代码支持PC/Android/IOS等各平台使用。
    开发环境:VS2010, Win7
    声明:本站源码保证可以运行,仅供学习交流。
    欢迎访问:www.zealfilter.com
    效果图展示如下:

    原图

    原图

    原图

    球面滤镜效果

    球面滤镜效果

    效果图(X = 240,Y=240)

    图像特效-Spherize滤镜.zip

    91.85 KB, 下载次数: 57, 下载积分: 金钱 -2

    球面滤镜

    回复

    使用道具 举报

    classn_11

    0

    主题

    2

    帖子

    22

    积分

    新手上路

    Rank: 1

    积分
    22
    发表于 2015-10-13 16:15:56 | 显示全部楼层
    为什么不直接公开C源码呢
    回复 支持 反对

    使用道具 举报

    classn_11

    1

    主题

    2

    帖子

    15

    积分

    新手上路

    Rank: 1

    积分
    15
    发表于 2016-1-3 23:18:45 | 显示全部楼层
    天空之城 发表于 2015-10-13 17:06
    您好,由于部分C代码是我们的算法引擎库ZPhotoEngine特有的,所以这部分代码不会公开,有需要可以直接使 ...

    你好,我现在需要用一下这个图像失真算法的c语言源码,但是你提供的算法库里我找不到,管理员在哪里呢,求帮忙
    回复 支持 反对

    使用道具 举报

  • ta_mind
    开心
    2015-9-28 22:37
  • classn_01: 31 classn_02

    [LV.5]常住居民I

    56

    主题

    63

    帖子

    1369

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    1369
     楼主| 发表于 2016-1-4 20:22:51 | 显示全部楼层
    //C语言版本      
       void SpherizeFilterProcess(unsigned char* srcData, int width, int height, int stride, unsigned char* dstData, int cenX, int cenY)
             {
                            unsigned char* pIn = srcData;
                            unsigned char* pOut = dstData;
                             unsigned char* p = NULL;
                            int offsetX = 0, offsetY = 0;
                            int newX = 0, newY = 0;
                            double radian = 0;
                            for (int y = 0; y < height; y++)
                            {
                                    for (int x = 0; x < width; x++)
                                    {
                                            offsetX = x - cenX;
                                            offsetY = y - cenY;
                                            radian = atan2(offsetY, offsetX);
                                            radius = (int)((offsetX * offsetX + offsetY * offsetY) / max(cenX, cenY));
                                            newX = (int)(radius * cos(radian)) + cenX;
                                            newY = (int)(radius * sin(radian)) + cenY;
                                            newX = min(w - 1, max(0, newX));
                                            newY = min(h - 1, max(0, newY));
                                            p = pIn + newY * stride + newX * 4;
                                            pOut[0] = p[0];
                                            pOut[1] = p[1];
                                            pOut[2] = p[2];
                                            pOut[3] = 255;                     
                                            pOut += 4;
                                    }
                                    pOut += stride - width * 4;
                            }           

            }
    回复 支持 反对

    使用道具 举报

  • ta_mind
    开心
    2016-1-20 15:35
  • classn_01: 3 classn_02

    [LV.2]偶尔看看I

    0

    主题

    1

    帖子

    61

    积分

    注册会员

    Rank: 2

    积分
    61
    发表于 2016-1-16 18:15:04 | 显示全部楼层
    看看效果.
    回复

    使用道具 举报

    classn_11

    0

    主题

    1

    帖子

    8

    积分

    新手上路

    Rank: 1

    积分
    8
    发表于 2016-6-5 21:07:54 | 显示全部楼层

    稍微改进了一下,判断像素是否在半径范围了,可以保留四角的像素
    回复 支持 反对

    使用道具 举报

    发表回复

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

      联系我们
    • QQ:3243218172
    • 邮箱:3243218172@qq.com
    • QQ交流群:567648913
      手机扫描二维码