gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 13:36:35 29 4
gpt4 key购买 nike

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

我不知道该怎么做,而且我在网上找不到任何教程。 Android 是否已经有任何功能可以做到这一点?我必须操纵单个像素的颜色吗?如果我必须弄乱像素,我该怎么做?

最佳答案

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

色调更改器(mutator):

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 数组,然后调用它们而不是调用 getPixel() 和 Color.colorToHSV() 每次微小的更改都会大大加快代码速度。

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

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

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

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

关于Android图像锐化、饱和度、色调、亮度和对比度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6462920/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com