从图像中获取脸部肤色

时间:2017-12-08 07:11:26

标签: android colors

我试过下面的代码,它返回了我在参数中传递的特定像素的颜色

int x = (int)event.getX();
int y = (int)event.getY();
int pixel = bitmap.getPixel(x,y);


int redValue = Color.red(pixel);
int blueValue = Color.blue(pixel);
int greenValue = Color.green(pixel);   

int[] color={redValue ,blueValue ,greenValue };
btn.setBackgroundColor(getHexColor(color));


public static int getHexColor(int[] color) {
return android.graphics.Color.rgb(color[0], color[1], color[2]);
}  

我也尝试调色板以下链接是参考链接,也没有返回完美的肤色肤色

this is i have also tried

谁知道如何提取或获取面部肤色的颜色?

2 个答案:

答案 0 :(得分:0)

使用此代码从图像中获取颜色。 您可以按照本教程获取更多信息。

https://medium.com/david-developer/extracting-colors-from-images-integrating-picasso-and-palette-b9ba45c9c418

 Palette.from(bitmap)
            .generate(new Palette.PaletteAsyncListener() {
                @Override
                public void onGenerated(Palette palette) {
                    Palette.Swatch textSwatch = palette.getVibrantSwatch();
                    if (textSwatch == null) {
                        Toast.makeText(MainActivity.this, "Null swatch :(", Toast.LENGTH_SHORT).show();
                        return;
                }
                backgroundGroup.setBackgroundColor(textSwatch.getRgb());
                titleColorText.setTextColor(textSwatch.getTitleTextColor());
                bodyColorText.setTextColor(textSwatch.getBodyTextColor());
            }
        });

答案 1 :(得分:0)

使用此

Matrix inverse = new Matrix();
                    v.getMatrix().invert(inverse);
                    float[] touchPoint = new float[] {event.getX(), event.getY()};
                    inverse.mapPoints(touchPoint);
                    int xCoord = (int) touchPoint[0];
                    int yCoord = (int) touchPoint[1];
                    int intColor = ((BitmapDrawable)imageView.getDrawable()).getBitmap().getPixel(xCoord,yCoord);


btn.setBackgroundColor(intColor);

希望这会有所帮助

OR

只需在代码中更改此内容,不要将颜色像素转换为十六进制。 直接在setBackGroundColor(像素)中使用颜色像素 喜欢

btn.setBackgroundColor(pixel);

这是我试过的完整代码

imageView.setOnTouchListener(new View.OnTouchListener() {
    @Override
    public boolean onTouch(View v, MotionEvent event) {

        if (event.getAction()==(MotionEvent.ACTION_DOWN)){

            Matrix inverse = new Matrix();
            v.getMatrix().invert(inverse);
            float[] touchPoint = new float[] {event.getX(), event.getY()};
            inverse.mapPoints(touchPoint);
            int xCoord = (int) touchPoint[0];
            int yCoord = (int) touchPoint[1];
            int intColor = ((BitmapDrawable)imageView.getDrawable()).getBitmap().getPixel(xCoord ,yCoord );


            try {
                btn.setBackgroundColor(intColor);
            }catch (Exception e){
                e.printStackTrace();
            }

            return false;
        }
        return false;
    }
});

尝试捕捉没有必要,但我只是为了预防任何计划外错误