我试过下面的代码,它返回了我在参数中传递的特定像素的颜色
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]);
}
我也尝试调色板以下链接是参考链接,也没有返回完美的肤色肤色
谁知道如何提取或获取面部肤色的颜色?答案 0 :(得分:0)
使用此代码从图像中获取颜色。 您可以按照本教程获取更多信息。
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;
}
});
尝试捕捉没有必要,但我只是为了预防任何计划外错误