2016-02-08 1 views
2

Мой текущий код позволяет вам сделать снимок и отобразить его внутри изображения. Как бы я мог реализовать способность касаться в любом месте изображения и отображать цвет в этом пикселе, тогда цвет заполнит твердый объект, такой как прямоугольник, чтобы отобразить, что это такое. Я надеюсь, что решение содержит значения RGB, поскольку они мне понадобятся для моего приложения позже.Добавление координаты касания и цветной пиксел

import android.app.Activity; 
    import android.content.Intent; 
    import android.graphics.drawable.Drawable; 
    import android.net.Uri; 
    import android.os.Bundle; 
    import android.os.Environment; 
    import android.provider.MediaStore; 
    import android.view.View; 
    import android.widget.Button; 
    import android.widget.ImageView; 


    import java.io.File; 

    public class MainActivity extends Activity { 

     private static final int CONTENT_REQUEST = 1337; 
     private File output = null; 
     Button button; 
     ImageView imageView; 


     @Override 
     public void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.activity_main); 
      button = (Button) findViewById(R.id.CameraButton); 
      imageView = (ImageView) findViewById(R.id.Image_view); 
      button.setOnClickListener(new View.OnClickListener() { 


       public void onClick(View v) { 

        Intent i = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
        File dir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM); 

        output = new File(dir, "COMP4Image.jpeg"); 
        i.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(output)); 

        startActivityForResult(i, CONTENT_REQUEST); 

       } 

      }); 
     } 

     @Override 
     protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
      String path = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM) + "/COMP4Image.jpeg"; 
      imageView.setImageDrawable(Drawable.createFromPath(path)); 
     } 


    } 

ответ

0

Я не буду предоставлять код, но решение довольно легко реализовать.

Добавить View.OnTouchListener в ваш ImageView.

Этот слушатель будет реагировать на каждое событие касания, происходящее на View. (коснитесь, переместите, коснитесь и т. д.)

Вы можете получить координату события с помощью MotionEvent.getX(int) (и y эквивалента). (читайте MotionEvent documentation, чтобы узнать больше о указателях).

Если у вас есть X и Y координаты сенсорного события, вы можете получить цвет пикселя заостренного пикселя в растровом изображении с Bitmap.getPixel(int, int) (см here получить Bitmap подключен к ImageView).

Voila, у вас есть выделенный цвет. Просто распечатайте его в прямоугольном представлении ниже вашего изображения и используйте класс утилиты Color для извлечения компонентов ARVB выбранного цвета.

Надеюсь, это поможет.

+0

Я внедрил это, однако координаты, которые он находит, когда я касаюсь экрана, показывают цвет, который слегка отходит от того, что должно быть. Я думаю, что это связано с тем, что это касается всего экрана, а не изображения. Вы знаете, как я отношусь к представлению изображения? http://pastebin.com/UbT48eJ1 @ pdegand59 –

+0

Или это относительно исходного разрешения изображения вместо масштабированного растрового изображения. –