Jump to content
gamarra

Android java- duvida

Recommended Posts

gamarra

Boas, antes de mais obrigado.

A minha duvida e o seguinte queria fazer uma aplicação para android, que e um detector de cores.

tem uma imagem e nessa imagem tenho que detectar as cores.

se alguem me poder ajudar agradeço

Obrigado mais uma vez =)

Share this post


Link to post
Share on other sites
HappyHippyHippo

o que pretendes fazer com as cores ? tipo um histograma, um gráfico (2D/3D/4D) de incidência de cores, criar layers com separação das cores encontradas, etc... ?

podes ser mais específico ?


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
gamarra

queria ter uma imagem no telemovel, e conseguir detectar as cores dessa imagem clicando em cima.

Share this post


Link to post
Share on other sites
HappyHippyHippo

o que pretendes fazer com as cores ? tipo um histograma, um gráfico (2D/3D/4D) de incidência de cores, criar layers com separação das cores encontradas, etc... ?

podes ser mais específico ?

mas o que queres fazer com essas cores, porque isso pode levar a diferentes implementações/abordagens ao problema !!!

porque "detectar" a cor de um pixel é de caras, no entanto, dependendo do que pretendes fazer, o que é necessário fazer envolve bem mais do que simplesmente saber a cor de um pixel


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
gamarra

basicamente era so isso detectar a cor do pixel, depois mostrava a cor que estava la

Share this post


Link to post
Share on other sites
HappyHippyHippo

poderás guardar um ponteiro para a View da tua Activity

getWindow().getDecorView().findViewById(android.R.id.content)

depois registas um listener para detectar e tratar eventos do toque no ecrã

no final é só tratar dos eventos, determinando onde no ecra foi tocado ficando somente para determinar a cor que tens na view nesse ponto

  • Vote 1

IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
gamarra

nao estou a conseguir colocar a imagem visivel

alguem me pode ajudar

obrigado

Share this post


Link to post
Share on other sites
HappyHippyHippo

tens a imagem como uma resource, ou estas a usar uma imagem tirada da câmera ?

no entanto, poderás sempre usar a ImageView para facilmente apresentares uma imagem na tua aplicação


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
gamarra

package com.example.colordetect;
import android.os.Bundle;
import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.view.Menu;
import android.view.MenuItem;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.support.v4.app.NavUtils;
public class ColorDetect extends Activity implements OnTouchListener{

View v;
float x,y;
Bitmap ball;
   @Override
   public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_color_detect);
    getWindow().getDecorView().findViewById(android.R.id.content);
    v = new View(this);
    v.setOnTouchListener(this);
    ball = BitmapFactory.decodeResource(getResources(), R.drawable.fantasy1);
    x = y = 0;
    setContentView(v);
   }
   @Override
   public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.activity_color_detect, menu);
    return true;
   }
   public boolean onTouch(View v, MotionEvent me) {
 x= me.getX();
 y= me.getY();


 return false;
   }

}

nao aparece a imagem

Edited by gamarra

Share this post


Link to post
Share on other sites
HappyHippyHippo

IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
gamarra

package com.example.colordetect;

import android.os.Bundle;
import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.Color;
import android.graphics.drawable.BitmapDrawable;
import android.view.Menu;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.widget.ImageView;
import android.widget.TextView;

public abstract class ColorDetect extends Activity implements OnTouchListener{
MyBringBackSurFace ourSurFaceView;
float x,y;

   @Override
   public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    ourSurFaceView = new MyBringBackSurFace(this);
    ourSurFaceView.setOnTouchListener(this);
    x = 0;
    y = 0;
    setContentView(ourSurFaceView);
    setContentView(R.layout.activity_color_detect);

   }
   @Override
   public void onPause() {
 super.onPause();
 ourSurFaceView.pause();

   }
   public void onResume() {
 super.onResume();
 ourSurFaceView.resume();
   }

   public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.activity_color_detect, menu);
    return true;

   final TextView textView = (TextView)findViewById(R.id.textView1);
   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
  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(0, 200000);
 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;    } 
 });

 return false;
}

tem um erro no target e no colordetect , nao consigo resolver

Edited by gamarra

Share this post


Link to post
Share on other sites
gamarra

package com.example.colordetect;

import android.os.Bundle;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.Color;
import android.graphics.drawable.BitmapDrawable;
import android.view.Menu;
import android.view.MotionEvent;
import android.view.View;
//import android.view.View.OnTouchListener;
import android.widget.ImageView;
import android.widget.TextView;

public class ColorDetect extends Activity {
//MyBringBackSurFace ourSurFaceView;
float x,y;

   @SuppressLint("ParserError")
@Override
   public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
   // ourSurFaceView = new MyBringBackSurFace(this);
   // ourSurFaceView.setOnTouchListener(this);
    x = 0;
    y = 0;
    setContentView(R.layout.activity_color_detect);
    final TextView textView = (TextView)findViewById(R.id.textView1);
    final TextView textViewCol = (TextView)findViewById(R.id.textViewcolor);
    final ImageView image = (ImageView)findViewById(R.id.imageView1);
    image.setOnTouchListener(new ImageView.OnTouchListener(){	 
	 @Override
	 public boolean onTouch(View v, MotionEvent event) {
	  // TODO Auto-generated method stub
	   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((int)event.getX(),(int)event.getY());
		 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;    } 
		 });

   }
   @Override
   public void onPause() {
 super.onPause();
   // ourSurFaceView.pause();

   }
   public void onResume() {
 super.onResume();
 //ourSurFaceView.resume();
   }

   public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.activity_color_detect, menu);





 return false;
}







}

ele neste momento esta a dar as cordenadas mas queria que desse nome das cores como, se algume me poder ajudar obrigado

Share this post


Link to post
Share on other sites
HappyHippyHippo

imagina: cada componente de cor pode ser de 0 a 255, logo existem 255*255*255 cores diferentes = 16581375

para isso necessitas de ter uma lista de cores a serem avaliadas, atribuir o nome (os nomes não existem em código só por si), e depois tentar verificar a qual cor selecionada mais parece.


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
gamarra

mas e o que esta la, so que esta me a dar as coordenadas =/, nao estou mesmo a perceber =(

se poderes explicar melhor obrigado

Share this post


Link to post
Share on other sites
pmg

Picuinhice :)

imagina: cada componente de cor pode ser de 0 a 255, logo existem ...

256*256*256 cores diferentes = 16777216


What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Share this post


Link to post
Share on other sites
gamarra

Picuinhice :)

256*256*256 cores diferentes = 16777216

mas como vou colocar isso em codigo

Share this post


Link to post
Share on other sites
HappyHippyHippo

Picuinhice :)

256*256*256 cores diferentes = 16777216

eu bem achei o número estranho, mas como era domingo e estava com pressa ...

mas como vou colocar isso em codigo

não se faz, achas que existem esse número de nomes para cores diferentes ???

para isso necessitas de ter uma lista de cores a serem avaliadas, atribuir o nome (os nomes não existem em código só por si), e depois tentar verificar a qual cor selecionada mais parece.

vais por aproximação, já te disse


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
gamarra

mas o codigo esta bem so tenho mudar nesta parte do codigo correcto

if(redValue == 0){

if(blueValue == 0)

if(greenValue == 0)
		 textViewCol.setText("It is Red");

Share this post


Link to post
Share on other sites
Flinger

                       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;    } 
                        });

Porque tu só estás a testar a existência do vermelho, mais nada. Além disso, como te disseram, o vermelho não se limita a esses valores, podendo ter várias tonalidades de vermelho... por exemplo o valor 254,0,0, também é vermelho, não?

Por isso te disseram que vais ter de ir por aproximações, se não quiseres definir o nome de cada possível valor dos 3 componentes.

Share this post


Link to post
Share on other sites
gamarra

if(pixel == Color.argb(pixel, redValue, greenValue, blueValue)){
		 // textViewCol.setTextColor(((redValue << 6) & 0xff0000) | ((greenValue >> 2) & 0xff00) | ((blueValue >> 10) & 0xff));
		 textViewCol.setText("color");
		 return true;
		 }

se eu colocar assim ele escreve color mas nao me da o nome da cor

se colocar como esta la em cima nao da nada =(

nao estou a perceber

mas se colocar este codigo de baixo ele da 0

if(pixel == Color.argb(pixel, redValue, greenValue, blueValue)){
		 // textViewCol.setTextColor(((redValue << 6) & 0xff0000) | ((greenValue >> 2) & 0xff00) | ((blueValue >> 10) & 0xff)); 
	    //  if(pixel == Color.RED){
						 textViewCol.setText(Integer.toString(redValue));

Edited by gamarra

Share this post


Link to post
Share on other sites
Flinger

:confused: Só te dá color porque é o que tu estás a mandar escrever... "color".

Se queres que ele identifique a cor através do RGB, tens de ser tu a dizer a que intervalos de valores correspondes cada cor. Por exemplo, podes considerar vermelho qualquer valor que se situe entre {255,0,0} e {255,20,0}, bem como entre este último e {221,20,0}... O problema coloca-se mesmo em como definir estes intervalos...

Uma forma mais matemática pode ser utilizar o valor Hexadecimal, que é a transformação directa dos valores RGB para um número escalar. Tens por exemplo o vermelho {255,0,0} que pode ser representado como o valor 0xFF0000, ou seja o inteiro 16711680. Transformando os valores assim pode ser mais fácil fazer os intervalos.

Para descobrires os intervalos, podes usar, por exemplo, a palete do paint .net ou do Gimp. Vais variando os valores do R, G e B e vais dando os teus limites para cada côr...

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.