获取像素区域并排放2张图像

时间:2014-11-24 08:44:26

标签: java android eclipse image-processing

我想知道如何并排放置两张图片 - 原始图片&处理过的图像另外我如何获得某种颜色的像素区域?就我而言,它是白色的。 以下是我的源代码。

public class SelectImageActivity 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
private Bitmap mBitmap;

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

    // 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]));
        Bitmap bitmap1=BitmapFactory.decodeFile(imagePath);
        mBitmap=toGrayscale(bitmap1);
        mBitmap=toBinary(mBitmap);
        // Put the updated bitmap into the main view
        image.setImageBitmap(mBitmap);  
        image.invalidate();
        // At the end remember to close the cursor or you will end with the RuntimeException!
        cursor.close();
    }
}


public Bitmap toGrayscale(Bitmap bmpOriginal)
{        
    int width, height;
    height = bmpOriginal.getHeight();
    width = bmpOriginal.getWidth();    

    Bitmap bmpGrayscale = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
    Canvas c = new Canvas(bmpGrayscale);
    Paint paint = new Paint();
    ColorMatrix cm = new ColorMatrix();
    cm.setSaturation(0);
    ColorMatrixColorFilter f = new ColorMatrixColorFilter(cm);
    paint.setColorFilter(f);
    c.drawBitmap(bmpOriginal, 0, 0, paint);
    return bmpGrayscale;
}

public Bitmap toBinary(Bitmap bmpOriginal) {
    int width, height, threshold_upper, threshold_lower;
    height = bmpOriginal.getHeight();
    width = bmpOriginal.getWidth();
    threshold_upper = 240;
    threshold_lower = 150;
    Bitmap bmpBinary = Bitmap.createBitmap(bmpOriginal);
   //int count=0;

    for(int x = 0; x < width; ++x) {
        for(int y = 0; y < height; ++y) {
            // get one pixel color
            int pixel = bmpOriginal.getPixel(x, y);
            int red = Color.red(pixel);

            //get binary value
            if(red < threshold_upper && red>threshold_lower){
                bmpBinary.setPixel(x, y, 0xFFFFFFFF);
                //count++;
            } else{
                bmpBinary.setPixel(x, y, 0xFF000000);
            }

        }
    }
    return bmpBinary;
}


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

这是我的xml文件:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".SelectImageActivity" >

<Button
    android:id="@+id/button"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    android:layout_alignParentLeft="true"
    android:layout_alignParentStart="true"
    android:layout_marginStart="15dp"
    android:layout_marginLeft="15dp"
    android:text="@string/pick_button" />

<ImageView
    android:id="@+id/image"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignLeft="@+id/button"
    android:layout_alignStart="@+id/button"
    android:layout_alignParentTop="true"
    android:layout_marginTop="70dp"
    android:src="@drawable/ic_launcher" />

<ImageView
    android:id="@+id/imageView1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentRight="true"
    android:layout_alignParentEnd="true" 
    android:layout_alignTop="@+id/image"
    android:layout_marginRight="64dp"
     android:layout_marginEnd="64dp"
    android:src="@drawable/ic_launcher" />

0 个答案:

没有答案