2016-04-13 5 views
2

私はAndroidが非常に新しく、画像処理アプリケーションを作成したいと考えています。 私はアンドロイド携帯電話のカメラを使用してコードを持ち上げて、キャプチャした写真をイメージビューに表示しています...コードはうまくいきます。問題は、グレースケールコードを動作させるように見えないことです。または、グレイスケール画像をイメージビューに表示できないようです...あなたの助けが必要です。どうもありがとうございました。イメージビューでイメージをグレースケールにする方法は?

これは、この画像をグレースケール化のためのコードですがうまく

public class CameraActivity extends ActionBarActivity { 
static final int REQUEST_IMAGE_CAPTURE = 1; 
ImageView imageView; 

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

    Button button = (Button) findViewById(R.id.button); 
    //King ina, button2 for processing 
    Button button2 = (Button) findViewById(R.id.button2); 
    imageView = (ImageView) findViewById(R.id.imageView); 

    //Disable the button if it has no camera 
    if (!hasCamera()) 
     button.setEnabled(false); 
} 

//Check if the user has camera 
private boolean hasCamera() { 
    return getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA_ANY); 
} 

//Launching the camera 
public void launchCamera(View view) { 
    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 

    //Take a picture and pass result along to onActivityResult 
    startActivityForResult(intent, REQUEST_IMAGE_CAPTURE); 
} 

//Show image on imageView 
@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if (requestCode == REQUEST_IMAGE_CAPTURE && resultCode == RESULT_OK) { 
     //Get the photo 
     Bundle extras = data.getExtras(); 
     Bitmap image = (Bitmap) extras.get("data"); 
     imageView.setImageBitmap(image); 
    } 
} 

} 

動作するコードを取り込むカメラ画像である...私はちょうど撮影した画像を示しオーバーライドコードを繰り返すことはできますか? どうもありがとう...あなたがイメージビューでそれを設定する前に、あなたのimageProcess()メソッドを呼び出す必要が

public Bitmap imageProcess(Bitmap image) { 
    int width, height; 
    height = image.getHeight(); 
    width = image.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(image, 0, 0, paint); 
    return bmpGrayscale; 
    } 

答えて

1

こんにちは、コントラストを使って画像を黒色にすることができます。

public static Bitmap createContrast(Bitmap src, double value) { 
// image size 
int width = src.getWidth(); 
int height = src.getHeight(); 
// create output bitmap 
Bitmap bmOut = Bitmap.createBitmap(width, height, src.getConfig()); 
// color information 
int A, R, G, B; 
int pixel; 
// get contrast value 
double contrast = Math.pow((100 + value)/100, 2); 

// scan through all pixels 
for(int x = 0; x < width; ++x) { 
    for(int y = 0; y < height; ++y) { 
     // get pixel color 
     pixel = src.getPixel(x, y); 
     A = Color.alpha(pixel); 
     // apply filter contrast for every channel R, G, B 
     R = Color.red(pixel); 
     R = (int)(((((R/255.0) - 0.5) * contrast) + 0.5) * 255.0); 
     if(R < 0) { R = 0; } 
     else if(R > 255) { R = 255; } 

     G = Color.red(pixel); 
     G = (int)(((((G/255.0) - 0.5) * contrast) + 0.5) * 255.0); 
     if(G < 0) { G = 0; } 
     else if(G > 255) { G = 255; } 

     B = Color.red(pixel); 
     B = (int)(((((B/255.0) - 0.5) * contrast) + 0.5) * 255.0); 
     if(B < 0) { B = 0; } 
     else if(B > 255) { B = 255; } 

     // set new pixel color to output bitmap 
     bmOut.setPixel(x, y, Color.argb(A, R, G, B)); 
    } 
} 

return bmOut; 
} 

がmathodコールで50にdouble値を設定します。..コードを参照してください。例

ため
createContrast(Bitmap src, 50) 

式の詳細については、いくつかの編集を研究した後this

+0

答えを受け入れていただきありがとうございます –

0

//Show image on imageView 
@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if (requestCode == REQUEST_IMAGE_CAPTURE && resultCode == RESULT_OK) { 
     //Get the photo 
     Bundle extras = data.getExtras(); 
     Bitmap image = (Bitmap) extras.get("data"); 
     imageView.setImageBitmap(imageProcess(image)); // called here 
    } 
} 
+1

私はこれを試してみます、ありがとうございました! –

+0

本当ですか!私はAndroid上でとてもうなずいています...しかし、調査した結果、良いグレースケールコードが見つかりました。 –

+0

@JericoManalastasこれが役に立ちましたか?正解に印をつけてください。そして、あなたを助けたすべての答えをupvoteしてください。ありがとう。 – Doomsknight

1

を参照してください、私はこのようにグレースケーリングんでした...

bmp = ((BitmapDrawable) imageView.getDrawable()).getBitmap(); 

    operation = Bitmap.createBitmap(bmp.getWidth(), bmp.getHeight(), bmp.getConfig()); 
    double GS_RED = 0.299; 
    double GS_GREEN = 0.587; 
    double GS_BLUE = 0.114; 
    int pixel; 
    int A, R, G, B; 
    // get image size 
    int width = bmp.getWidth(); 
    int height = bmp.getHeight(); 

    // scan through every single pixel 
    for (int x = 0; x < width; ++x) { 
     for (int y = 0; y < height; ++y) { 
      // get one pixel color 
      pixel = bmp.getPixel(x, y); 

      // retrieve color of all channels 
      A = Color.alpha(pixel); 
      R = Color.red(pixel); 
      G = Color.green(pixel); 
      B = Color.blue(pixel); 

      // take conversion up to one single value 
      R = G = B = (int) (GS_RED * R + GS_GREEN * G + GS_BLUE * B); 
      // set new pixel color to output bitmap 
      operation.setPixel(x, y, Color.argb(A, R, G, B)); 
      //Show grayscaled image 
      imageView.setImageBitmap(operation); 
     } 
    } 

答えてくれてありがとうと、このサイト。 https://xjaphx.wordpress.com/2011/06/21/image-processing-grayscale-image-on-the-fly/

+0

良いもの。あなたが解決策を見つけてうれしい。正しいものとしてマークしてください。 :) – Doomsknight

関連する問題