接上之前的数字图像处理软件系列,其实这个APP很早之前就做完了,主要是模仿了美图秀秀。之前因为太多事而耽误了,现在继续把这系列的博客写完

    那么开始正文:

    这次要讲的图片特效部分是:浮雕特效

    老规矩,话不多说,我们来看效果图:

    数字图像处理软件-图片特效--浮雕效果(四) - 图1

    数字图像处理软件-图片特效--浮雕效果(四) - 图2

    那么下面就开始讲解:

    浮雕的特性我们必须得知道,浮雕不凸显细节但是凸显轮廓,这是浮雕的特性,那么轮廓有哪些特点呢?我个人认为,图片中的事物,他们的轮廓区分,基本可以靠颜色区分,也就是边界的颜色差异,当然这个方法只是可以突出局部的轮廓,但这也足够用了。所以和前几篇一样,我们需要用RGB操作,即比较RGB(凸显边界)

    1. //浮雕
    2. public static Bitmap img_fudiao(Bitmap bm){
    3. intwidth = bm.getWidth();
    4. int height = bm.getHeight();
    5. Bitmap bmp= Bitmap.createBitmap(width, height, Bitmap.Config.RGB_565);
    6. int color,color2;
    7. //前一个像素
    8. int pixelsR,pixelsR2;
    9. int pixelsG,pixelsG2;
    10. int pixelsB,pixelsB2;
    11. //当前像素
    12. int[] pixels = new int[width * height];
    13. bm.getPixels(pixels, 0, width, 0, 0, width, height);
    14. for(int i=1;i<width*height;i++)
    15. {
    16. color = pixels[i-1];
    17. //前一个像素
    18. pixelsR = Color.red(color);
    19. pixelsG = Color.green(color);
    20. pixelsB = Color.blue(color);
    21. //当前像素
    22. color2 = pixels[i];
    23. pixelsR2 = Color.red(color2);
    24. pixelsG2 = Color.green(color2);
    25. pixelsB2 = Color.blue(color2);
    26. pixelsR = (pixelsR - pixelsR2 + 127);
    27. pixelsG = (pixelsG - pixelsG2 + 127);
    28. pixelsB = (pixelsB - pixelsB2 + 127);
    29. //均小于等于255
    30. if(pixelsR > 255){
    31. pixelsR = 255;
    32. }
    33. if(pixelsG > 255){
    34. pixelsG = 255;
    35. }
    36. if(pixelsB > 255){
    37. pixelsB = 255;
    38. }
    39. pixels[i] = Color.argb(255, pixelsR, pixelsG, pixelsB);
    40. }
    41. bmp.setPixels(pixels, 0, width, 0, 0, width, height);
    42. return bmp;
    43. }

    在代码中可以看到,每次去相邻两项的RGB,让他们做比较,差异色大的可以基本确定是边界色,也就可以凸显轮廓

    最后返回结果。