Java 在android中将RGB转换为HSV

Java 在android中将RGB转换为HSV,java,android,rgb,hsv,Java,Android,Rgb,Hsv,我想从像素中获取ARGB值并转换为HSV,然后用新值设置像素 我不完全明白怎么做。有人能帮我吗?假设您有一个位图对象和x和y坐标。您可以从位图中获取32位值的颜色,如下所示: int color = bitmap.getPixel(x, y); int a = Color.alpha(color); int r = Color.red(color); int g = Color.green(color); int b = Color.blue(color); float[] hsv = ne

我想从像素中获取ARGB值并转换为HSV,然后用新值设置像素


我不完全明白怎么做。有人能帮我吗?

假设您有一个位图对象和x和y坐标。您可以从位图中获取32位值的颜色,如下所示:

int color = bitmap.getPixel(x, y);
int a = Color.alpha(color);
int r = Color.red(color);
int g = Color.green(color);
int b = Color.blue(color);
float[] hsv = new float[3];
Color.RGBToHSV(r, g, b, hsv);
您可以像这样分离argb组件:

int color = bitmap.getPixel(x, y);
int a = Color.alpha(color);
int r = Color.red(color);
int g = Color.green(color);
int b = Color.blue(color);
float[] hsv = new float[3];
Color.RGBToHSV(r, g, b, hsv);
然后您可以像这样转换为HSV:

int color = bitmap.getPixel(x, y);
int a = Color.alpha(color);
int r = Color.red(color);
int g = Color.green(color);
int b = Color.blue(color);
float[] hsv = new float[3];
Color.RGBToHSV(r, g, b, hsv);
现在,您可以随心所欲地操纵HSV值。完成后,您可以转换回rgb:

color = Color.HSVToRGB(hsv);
或者,您希望使用alpha值:

color = Color.HSVToRGB(a, hsv);
然后可以将颜色写回位图(它必须是可变位图):


请参阅Android文档:


此方法将RGB组件转换为HSV,并返回包含生成的HSV组件的
HSV
-3元素数组
hsv[0]
是色调[0..360],
hsv[1]
是饱和度[0…1],
hsv[2]
是值[0…1]。

使用OpenCV将RGBA转换为hsv:

import org.opencv.core.CvType;
import org.opencv.core.Mat;
import org.opencv.core.Scalar;
import org.opencv.imgproc.Imgproc;

 private Scalar converScalarRgba2HSV(Scalar rgba) {
    Mat  pointMatHsv= new Mat();
    Mat pointMatRgba = new Mat(1, 1, CvType.CV_8UC3, rgba);
    Imgproc.cvtColor(pointMatRgba,pointMatHsv, Imgproc.COLOR_RGB2HSV_FULL, 4);

    return new Scalar(pointMatHsv.get(0, 0));
}

非常感谢,你救了我:3@Madalin如果答案对您有帮助,请接受。谢谢。但是我得到了这个错误:“类型颜色的方法alpha(int)未定义”如何修复此问题?@AlexLing确保正确导入了颜色类:导入android.graphics.Color;@AlexLing使用Java AWT颜色类的RGBtoHSB函数:改进的格式和语法可能的重复。请指定什么是标量和Mat?什么是Imgproc?以及如何在一点时间内从像素获取标量类型将地图作为参数传递?谢谢!