用VC实现羽化特效

zzxzzx159357789 2013-02-02 11:11:10
用VC实现羽化特效,哪位牛人能给我说说嘛
...全文
372 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
「已注销」 2013-02-18
  • 打赏
  • 举报
回复
用高斯算法,我在您的另一个帖子里已经回复了,我有图形库(gingkoVG)可以实现:各种Filter,包含高斯和锐化等。 (http://bbs.csdn.net/topics/390369037?page=1#post-393701434)
elemusic 2013-02-16
  • 打赏
  • 举报
回复
1楼能给个效果图么?写出来的效果好像不太对劲.....
nabasasun 2013-02-16
  • 打赏
  • 举报
回复
int[] pixels 这句在C++里是不可能存在的,肯定是别的代码,而且你new 了吧,只有c# java是可以只new 而不必delete的
  • 打赏
  • 举报
回复
呵呵,来学习一下呵呵。
zzxzzx159357789 2013-02-02
  • 打赏
  • 举报
回复
感觉这是Java的代码吧
zzxzzx159357789 2013-02-02
  • 打赏
  • 举报
回复
bitmap.getPixels(pixels ,0 , width , 0 , 0 , width , height); 这个函数Bitmap是没有的,应该是用户自定义的,我来试试看
jimette 2013-02-02
  • 打赏
  • 举报
回复
VC实现羽化特效float mSize = 0.5f;
  public Bitmap render(Bitmap bitmap)
  {
    if(bitmap == null)return null;

    final int SIZE = 32768;
    int width = bitmap.getWidth();
    int height = bitmap.getHeight();
    int ratio = width >height ? height * SIZE /width : width * SIZE/height;//这里有额外*2^15 用于放大比率;之后的比率使用时需要右移15位,或者/2^15.

    int cx = width>>1;
    int cy = height>>1;
    int max = cx*cx + cy*cy;
    int min = (int)(max *(1-mSize));
    int diff= max -min;// ===>>    int diff = (int)(max * mSize);


    int[] pixels = new int[width * height];
    bitmap.getPixels(pixels ,0 , width , 0 , 0 , width , height);
    for(int i=0 ; i<height ; i++)
    {
      for(int j=0 ; j<width ; j++)
      {
        int pixel = pixels[i*width +j];
        int r = (pixel & 0x00ff0000)>>16;
        int g = (pixel & 0x0000ff00)>>8;
        int b = (pixel & 0x000000ff);

        int dx = cx - j;
        int dy = cy - i;

        if(width > height)
        {
          dx= (dx*ratio)>>15;
        }
        else
        {
          dy = (dy * ratio)>>15;
        }

        int dstSq = dx*dx + dy*dy;
        float v = ((float) dstSq / diff)*255;
        r = (int)(r +v);
        g = (int)(g +v);
        b = (int)(b +v);
        r = (r>255 ? 255 : (r<0? 0 : r));
        g = (g>255 ? 255 : (g<0? 0 : g));
        b = (b>255 ? 255 : (b<0? 0 : b));
        pixels[i*width +j] = (pixel & 0xff000000) + (r<<16)+ (g<<8) +b;
      }
    }

    return Bitmap.createBitmap(pixels ,width , height , Config.ARGB_8888);
  }
羽化值越大,朦胧范围越宽,羽化值越小,朦胧范围越窄。可根据你想留下图的大小来调节。 算法分析: 1、通过对rgb值增加额外的V值实现朦胧效果 2、通过控制V值的大小实现范围控制。 3、V = 255 * 当前点Point距中点距离的平方s1 / (顶点距中点的距离平方 *mSize)s2; 4、s1 有根据 ratio 修正 dx dy值。

19,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧