仅更改位图的HSV特定区域

时间:2014-05-28 08:00:48

标签: android bitmap

我想改变位图的HSV我在网上找到了一些帮助,但他们正在改变整个图像的HSV。在我的情况下,我有循环选择器,使用户能够选择图像的特定部分,而不是更改其HSV。它看起来像这样

enter image description here

我们可以不使用任何其他第三方图像处理库吗?

2 个答案:

答案 0 :(得分:1)

如果您知道如何专门获取圆圈的像素索引,请执行以下操作:

int pixel = bitmap.getPixel(X,Y);
float[] HSV=new float[3];
Color.RGBToHSV(Color.red(pixel), Color.green(pixel), Color.blue(pixel), HSV);
// Manipulate the HSV array as you want then,
bitmap.setPixel(X,Y, Color.HSVToColor(HSV));

PS:如果你想知道如何获得像素的X和Y坐标,请做评论。我会根据您的要求编辑帖子。

编辑:

如果你有圆心的坐标和你想要操纵的圆的半径,你可以通过以下方式获得圆形区域的像素(并对其进行操作)。

int centerX = 100; // This is the X co-ordinate of the center of your circle
int centerY = 100; // This is the Y co-ordinate of the center of your circle
int radius = 40; // This is the radius of the circle you want
for(int Y=centerY-radius; Y<=centerY+radius;Y++)
{
    for(int X=centerX-radius;X<=centerX+radius;X++)
    {
        int distance = (int)Math.sqrt(Math.pow((X-centerX),2) + Math.pow((Y-centerY),2));
        if(distance<=radius)
        {
            int pixel = bitmap.getPixel(X,Y);
            float[] HSV=new float[3];
            Color.RGBToHSV(Color.red(pixel), Color.green(pixel), Color.blue(pixel), HSV);
            // Manipulate the HSV array as you want then,
            bitmap.setPixel(X,Y, Color.HSVToColor(Color.alpha(pixel),HSV));
        }
    }
}

答案 1 :(得分:0)

  1. 您可以使用Bitmap.setPixel(int, int, int);来更改位置(x,y)的颜色。
    1. 您可以使用位图创建画布使用

      Canvas canvas = new Canvas(bitmap);

    2. 您可以在原始位图上添加新内容。