【Android图像处理】图像处理之-油画效果

来源:互联网 发布:广告投放算法好吃 编辑:程序博客网 时间:2024/04/25 07:19

  油画给人的感觉怎么说呢?没有很漂亮,但是很有艺术感。

  在Android中如何实现油画效果呢?

  下面来看具体的算法:

//油画public static Bitmap Oil(Bitmap bitmap){int w = bitmap.getWidth();int h = bitmap.getHeight();Bitmap result = Bitmap.createBitmap(w, h, Bitmap.Config.RGB_565);int[] oldPx = new int[w * h];int[] newPx = new int[w * h];bitmap.getPixels(oldPx, 0, w, 0, 0, w, h);int index = 0; int subradius = 3; int intensity = 20;int[] intensityCount = new int[intensity+1];  int[] ravg = new int[intensity+1];  int[] gavg = new int[intensity+1];  int[] bavg = new int[intensity+1];//初始化for(int i = 0; i <= intensity; i++){  intensityCount[i] = 0;  ravg[i] = 0;  gavg[i] = 0;  bavg[i] = 0;  }for(int row = 0; row < h; row++){  int ta = 0, tr = 0, tg = 0, tb = 0;  for(int col = 0; col < w; col++){  for(int subRow = -subradius; subRow <= subradius; subRow++){  for(int subCol = -subradius; subCol <= subradius; subCol++){  int nrow = row + subRow;  int ncol = col + subCol;  if(nrow >=h || nrow < 0){  nrow = 0;  }  if(ncol >= w || ncol < 0){  ncol = 0;  }index = nrow * w + ncol;  tr = (oldPx[index] >> 16) & 0xff;  tg = (oldPx[index] >> 8) & 0xff;  tb = oldPx[index] & 0xff;  int curIntensity = (int)(((double)((tr+tg+tb)/3)*intensity)/255.0f);  intensityCount[curIntensity]++;  ravg[curIntensity] += tr;  gavg[curIntensity] += tg;  bavg[curIntensity] += tb;  }  }  int maxCount = 0, maxIndex = 0;  for(int m=0; m<intensityCount.length; m++){  if(intensityCount[m] > maxCount){  maxCount = intensityCount[m];  maxIndex = m;  }  }  //计算平均值  int nr = ravg[maxIndex] / maxCount;  int ng = gavg[maxIndex] / maxCount;  int nb = bavg[maxIndex] / maxCount;  index = row * w + col;  newPx[index] = (ta << 24) | (nr << 16) | (ng << 8) | nb;  //重新初始化for(int i=0; i<=intensity; i++){  intensityCount[i] = 0;  ravg[i] = 0;  gavg[i] = 0;  bavg[i] = 0;  }  }  }result.setPixels(newPx, 0, w, 0, 0, w, h);return result;}

   以上算法的效果如下:

                           效果图                                                                原图


  这样也许会感觉效果不太明显,不仔细看根本看不出来。还缺了一步处理:加纹理

加上纹理后,效果是这样的:

                    油画                                                                   原图


   其中,Android实现图片加纹理的算法地址:

       Android实现图片加纹理


1 0