如何在Android中获取像素颜色?

我使用意图调用并显示从图库中的图像,现在我使它能够让我的图像坐标在TextView中使用这些:

final TextView textView = (TextView)findViewById(R.id.textView); final TextView textViewCol = (TextView)findViewById(R.id.textViewColor); targetImage.setOnTouchListener(new ImageView.OnTouchListener(){ @Override public boolean onTouch(View v, MotionEvent event) { // TODO Auto-generated method stub int x=0; int y=0; textView.setText("Touch coordinates : " + String.valueOf(event.getX()) + "x" + String.valueOf(event.getY())); ImageView imageView = ((ImageView)v); Bitmap bitmap = ((BitmapDrawable)imageView.getDrawable()).getBitmap(); int pixel = bitmap.getPixel(x,y); int redValue = Color.red(pixel); int blueValue = Color.blue(pixel); int greenValue = Color.green(pixel); if(pixel == Color.RED){ textViewCol.setText("It is RED"); } /*if(redValue == 255){ if(blueValue == 0) if(greenValue==0) textViewCol.setText("It is Red"); }*/ return true; } }); 

现在我需要做的是 以获得用户select的确切坐标的colour (RGB value) ,然后将其分配给#FF0000#00FF00#0000FF但现在,请根据我的具体情况帮助获取像素颜色。

干杯。

你可以像这样从视图中获取像素:

 ImageView imageView = ((ImageView)v); Bitmap bitmap = ((BitmapDrawable)imageView.getDrawable()).getBitmap(); int pixel = bitmap.getPixel(x,y); 

现在你可以得到每个频道:

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

Color函数返回每个通道的值。 因此,您只需检查红色是255还是绿色和蓝色是0,而不是将textView文本设置为“它是红色的”。 只要注意一点,说有些东西是红色的,不仅仅是红色通道大于零。 当然,Cos 255-Green和255-Red是黄色的。 您也可以将像素与不同的颜色进行比较。 例如:

 if(pixel == Color.MAGENTA){ textView.setText("It is Magenta"); } 

希望它有帮助。

您可以根据您的要求进行修改。 这段代码将帮助你获得像素的颜色。

 public static int getDominantColor(Bitmap bitmap) { Bitmap newBitmap = Bitmap.createScaledBitmap(bitmap, 1, 1, true); final int color = newBitmap.getPixel(0, 0); newBitmap.recycle(); return color; } 

这对我来说更准确。 这里的关键是使用View.getDrawingCache而不是DrawableBitmap

  palleteView.setOnTouchListener(new View.OnTouchListener(){ @Override public boolean onTouch(View v, MotionEvent ev) { // TODO Auto-generated method stub ImageView img = (ImageView) v; final int evX = (int) ev.getX(); final int evY = (int) ev.getY(); img.setDrawingCacheEnabled(true); Bitmap imgbmp = Bitmap.createBitmap(img.getDrawingCache()); img.setDrawingCacheEnabled(false); try { int pxl = imgbmp.getPixel(evX, evY); pickedColorView.setBackgroundColor(pxl); }catch (Exception e){ } imgbmp.recycle(); return true; } });