2015-03-06 1 views
-1
package com.example.hello; 
//import android.support.v7.app.ActionBarActivity; 
import android.app.Activity; 
import android.content.Intent; 
import android.database.Cursor; 
import android.graphics.BitmapFactory; 
import android.net.Uri; 
import android.os.Bundle; 
import android.provider.MediaStore; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 
import android.widget.ImageView; 

/** 
* This activity displays the gallery image picker. 
* It displays the image that was picked. 
* 
* @author ITCuties 
* 
*/ 
public class GalleryActivity extends Activity implements OnClickListener { 

    // Image loading result to pass to startActivityForResult method. 
    private static int LOAD_IMAGE_RESULTS = 1; 

    // GUI components 
    private Button button; // The button 
    private ImageView image;// ImageView 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_gallery); 

     // Find references to the GUI objects 
     button = (Button)findViewById(R.id.button); 
     image = (ImageView)findViewById(R.id.image); 

     // Set button's onClick listener object. 
     button.setOnClickListener(this); 

    } 

    @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     super.onActivityResult(requestCode, resultCode, data); 

     // Here we need to check if the activity that was triggers was the Image Gallery. 
     // If it is the requestCode will match the LOAD_IMAGE_RESULTS value. 
     // If the resultCode is RESULT_OK and there is some data we know that an image was picked. 
     if (requestCode == LOAD_IMAGE_RESULTS && resultCode == RESULT_OK && data != null) { 
      // Let's read picked image data - its URI 
      Uri pickedImage = data.getData(); 
      // Let's read picked image path using content resolver 
      String[] filePath = { MediaStore.Images.Media.DATA }; 
      Cursor cursor = getContentResolver().query(pickedImage, filePath, null, null, null); 
      cursor.moveToFirst(); 
      String imagePath = cursor.getString(cursor.getColumnIndex(filePath[0])); 

      // Now we need to set the GUI ImageView data with data read from the picked file. 
      image.setImageBitmap(BitmapFactory.decodeFile(imagePath)); 

      // At the end remember to close the cursor or you will end with the RuntimeException! 
      cursor.close(); 
     } 
    } 

    @Override 
    public void onClick(View v) { 
     // Create the Intent for Image Gallery. 
     Intent i = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); 

     // Start new activity with the LOAD_IMAGE_RESULTS to handle back the results when image is picked from the Image Gallery. 
     startActivityForResult(i, LOAD_IMAGE_RESULTS); 
    } 
} 

этот код выберите изображение из галереи ..пользователь выберите изображение и обнаружить цвет

package com.example.hello; 

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

public class ColourPickerActivity extends Activity { 

TextView touchedXY, invertedXY, imgSize, colorRGB; 
ImageView imgSource1, imgSource2; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_colourpicker); 

     // touchedXY = (TextView)findViewById(R.id.xy); 
     // invertedXY = (TextView)findViewById(R.id.invertedxy); 
     // imgSize = (TextView)findViewById(R.id.size); 
     colorRGB = (TextView)findViewById(R.id.colorrgb); 
    // imgSource1 = (ImageView)findViewById(R.id.source1); 
    imgSource2 = (ImageView)findViewById(R.id.source2); 

    //imgSource1.setOnTouchListener(imgSourceOnTouchListener); 
    imgSource2.setOnTouchListener(imgSourceOnTouchListener); 

    } 

    OnTouchListener imgSourceOnTouchListener 
    = new OnTouchListener(){ 

    @Override 
    public boolean onTouch(View view, MotionEvent event) { 

    float eventX = event.getX(); 
    float eventY = event.getY(); 
    float[] eventXY = new float[] {eventX, eventY}; 

    Matrix invertMatrix = new Matrix(); 
    ((ImageView)view).getImageMatrix().invert(invertMatrix); 

    invertMatrix.mapPoints(eventXY); 
    int x = Integer.valueOf((int)eventXY[0]); 
    int y = Integer.valueOf((int)eventXY[1]); 

// touchedXY.setText(
//  "touched position: " 
//  + String.valueOf(eventX) + "/" 
//  + String.valueOf(eventY)); 
// invertedXY.setText(
//  "touched position: " 
//  + String.valueOf(x) + "/" 
//  + String.valueOf(y)); 

    Drawable imgDrawable = ((ImageView)view).getDrawable(); 
    Bitmap bitmap = ((BitmapDrawable)imgDrawable).getBitmap(); 

// imgSize.setText(
//  "drawable size: " 
//  + String.valueOf(bitmap.getWidth()) + "/" 
//  + String.valueOf(bitmap.getHeight())); 

    //Limit x, y range within bitmap 
// if(x < 0){ 
// x = 0; 
// }else if(x > bitmap.getWidth()-1){ 
// x = bitmap.getWidth()-1; 
// } 
// 
// if(y < 0){ 
// y = 0; 
// }else if(y > bitmap.getHeight()-1){ 
// y = bitmap.getHeight()-1; 
// } 

    int touchedRGB = bitmap.getPixel(x, y); 

    colorRGB.setText("touched color: " + "#" + Integer.toHexString(touchedRGB)); 
    colorRGB.setTextColor(touchedRGB); 

    return true; 
    }}; 

} 

этот код Телль цвет пикселя на ощупь изображения, который находится в папке вытяжке .. как я могу интегрировать эти два мероприятия. Я хочу выбрать изображение из галереи и применить на этом изображении цветной детектор, который выбран из галереи.

ответ

0

Ели вам нужно будет позвонить второму классу из первого в onActivityResult, добавив imagePath в намерение:

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 

    if (requestCode == LOAD_IMAGE_RESULTS && resultCode == RESULT_OK && data != null) { 
     (previous code) 

     Intent intent = new Intent(this, ColourPickerActivity.class); 
     intent.putExtra("IMAGE_PATH", imagePath); 
     startActivity(intent) 
    } 
} 

Тогда в ваших ColourPickerActivity вам нужно будет извлечь этот путь и загрузить его в ImageView:

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    (previous code) 

    String imagePath = getIntent().getStringExtra("IMAGE_PATH"); 

    //Load image into the ImageView 
    imgSource2.setImageBitmap(BitmapFactory.decodeFile(imagePath)); 
} 

Надежда, что помогает, ура!

+0

и как это использовать ?? int touchedRGB = bitmap.getPixel (x, y); – user4440416

+0

@ user4440416 Это автоматически выполняется классом 'ColourPickerActivity', когда пользователь касается изображения. Если вы посмотрите немного вверх, вы увидите, что растровое изображение извлекается из рисуемого изображения. Можете ли вы попробовать это, чтобы увидеть, работает ли это? :) – Aballano

+0

но он не работает – user4440416

Смежные вопросы