2016-04-25 6 views
0

を選択したときに、私はこれを行うプログラムを作成したい:通知ピクセルから特定の色が

  • テイク絵。
  • 色を取得する領域を選択します。
  • アプリは、我々は、私が何をしようとしているアプリ

のために受信されたオプションに基づいて、これは白の現在の日陰であることをユーザーに通知し、日陰を選択するかどうかを確認するメッセージを取得することです選択された色(タッチされた位置から)は、私が実装している白の色合いに近くなります(タッチされた色が#FCFFFFFFと#FCFEF9D5の間にあれば、プログラムは "A2"を表示します)。

これは、これまでの私のコードです:言わ

public class MainActivity extends Activity { 


TextView touchedXY, invertedXY, imgSize, colorRGB; 
ImageView imgSource1; 
Button b, bOpenFromGallery; 
static final int CAMREQUEST = 1; 

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

    touchedXY = (TextView) findViewById(R.id.xy); 
    invertedXY = (TextView) findViewById(R.id.invertedxy); 
    imgSize = (TextView) findViewById(R.id.size); 
    colorRGB = (TextView) findViewById(R.id.colorrgb); 
    b = (Button)findViewById(R.id.Button01); 
    bOpenFromGallery = (Button)findViewById(R.id.button_openFromGallery); 
    imgSource1 = (ImageView)findViewById(R.id.source1); 





    b.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 
      startActivityForResult(cameraIntent, CAMREQUEST); 

     } 

    }); 

} 

protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if (resultCode == RESULT_OK) { 
     if (requestCode == CAMREQUEST) { 

      Bitmap bitmap = (Bitmap) data.getExtras().get("data"); 
      Bitmap newBitmap = BITMAP_RESIZER(bitmap, 1280, 768); 


      imgSource1.setImageBitmap(newBitmap); 
      imgSource1.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; 
    } 
}; 

public Bitmap BITMAP_RESIZER(Bitmap bitmap,int newWidth,int newHeight) { 
    Bitmap scaledBitmap = Bitmap.createScaledBitmap(bitmap, newWidth, newHeight, true); 

    float ratioX = newWidth/(float) bitmap.getWidth(); 
    float ratioY = newHeight/(float) bitmap.getHeight(); 
    float middleX = newWidth/2.0f; 
    float middleY = newHeight/2.0f; 

    Matrix scaleMatrix = new Matrix(); 
    scaleMatrix.setScale(ratioX, ratioY, middleX, middleY); 

    Canvas canvas = new Canvas(scaledBitmap); 
    canvas.setMatrix(scaleMatrix); 
    canvas.drawBitmap(bitmap, middleX - bitmap.getWidth()/2, middleY - bitmap.getHeight()/2, new Paint(Paint.FILTER_BITMAP_FLAG)); 

    return scaledBitmap; 

} 

}

答えて

1

hereとして、あなたは画像左上隅には、その後、タッチ位置を計算し得ることができます。その後 、uがこれを行うことにより、その領域の色を取得することができます:

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

あなたは、このように色をフィルタリングすることができます。

int red = Color.red(pixel); 
int blue = Color.blue(pixel); 
int green = Color.green(pixel); 
関連する問題