Android图像锐化、饱和度、色调、亮度和对比度



我正在尝试创建一个应用程序,通过调整上述每个字段的搜索框,可以调整图像的色调、饱和度、亮度、对比度和清晰度。喜欢在http://ronbigelow.com/articles/workflow_basic/hue-saturation_tool.jpg

我不知道如何做到这一点,我在网上找不到任何教程。安卓系统已经有这样的功能了吗?我必须处理单个像素的颜色吗?如果我必须处理像素,我该怎么做?

是的,android有一些操纵颜色的工具,有些比其他工具更容易。对于所有图像的一般空间,唯一的方法就是修改单个像素。还有其他快速而肮脏的技巧,速度要快得多,但精度要低得多(ColorFilter)。

色调转换器:

private Bitmap adjustedHue(Bitmap o, int deg)
{
   Bitmap srca = o;
   Bitmap bitmap = srca.copy(Bitmap.Config.ARGB_8888, true);
   for(int x = 0;x < bitmap.getWidth();x++)
       for(int y = 0;y < bitmap.getHeight();y++){
               int newPixel = hueChange(bitmap.getPixel(x,y),deg);
               bitmap.setPixel(x, y, newPixel);
       }
   return bitmap;
}
private int hueChange(int startpixel,int deg){
   float[] hsv = new float[3];       //array to store HSV values
   Color.colorToHSV(startpixel,hsv); //get original HSV values of pixel
   hsv[0]=hsv[0]+deg;                //add the shift to the HUE of HSV array
   hsv[0]=hsv[0]%360;                //confines hue to values:[0,360]
   return Color.HSVToColor(Color.alpha(startpixel),hsv);
}

从这里看,饱和度/亮度是微不足道的。但是,虽然所有这些都会得到你想要的,但它有点慢。getPixel()函数特别强烈。如果你要实时修改这些东西,我建议你先"缓存"像素。例如,首先将所有的HUE、SATURATION、VALUE和ALPHA值存储为2d数组,并调用THEM,而不是在每次轻微更改时调用getPixel()和Color.colorToHSV(),这将大大加快代码的速度。

此外,bitmap.getPixels()函数对我来说效果更好。你可以先存储它生成的数组,然后对其进行迭代。

现在,虽然亮度/对比度可以使用类似的像素特定方法(将V乘以一些值,并添加一些偏移)。。。清晰度并不是那么简单。清晰度不是一种孤立的基于颜色的修改,它是对图片本身的修改(称为"卷积")。也就是说,变换需要了解一些关于相邻像素的信息才能工作。我不知道有一个内置的android功能。但这可以通过多种方式实现。

如果你想要一个"锐化"函数,我会先尝试一个"模糊"函数。这是一个类似的过程,但它更直观(也更酷)。实际上,你可以使用模糊来锐化图像。这个家伙很好地解释了在java中使用的所有这些(使用源代码/小程序):

http://www.jhlabs.com/ip/blurring.html

相关内容

  • 没有找到相关文章

最新更新