일단 그레이스케일까지는 문제없이 진행됩니다만,...

이진화에서 src.getWidth()조차 안됩니다....

또한 Invert에서도 어딘가 문제가있는지 계속 실행중 종료되네요

초보학생에게 많은 도움주시면 감사하겠습니다!!!!!

 

 

 

 

 //Logcat

 

 

 

 12-06 11:44:49.459: D/AndroidRuntime(13687): Shutting down VM
12-06 11:44:49.459: W/dalvikvm(13687): threadid=1: thread exiting with uncaught exception (group=0x417d62a0)
12-06 11:44:49.464: E/AndroidRuntime(13687): FATAL EXCEPTION: main
12-06 11:44:49.464: E/AndroidRuntime(13687): java.lang.NullPointerException
12-06 11:44:49.464: E/AndroidRuntime(13687):  at com.example.effect_project.MainActivity.print(MainActivity.java:206)
12-06 11:44:49.464: E/AndroidRuntime(13687):  at com.example.effect_project.MainActivity.setBinary(MainActivity.java:125)
12-06 11:44:49.464: E/AndroidRuntime(13687):  at com.example.effect_project.MainActivity.onOptionsItemSelected(MainActivity.java:89)
12-06 11:44:49.464: E/AndroidRuntime(13687):  at android.app.Activity.onMenuItemSelected(Activity.java:2617)
12-06 11:44:49.464: E/AndroidRuntime(13687):  at com.android.internal.policy.impl.PhoneWindow.onMenuItemSelected(PhoneWindow.java:1045)
12-06 11:44:49.464: E/AndroidRuntime(13687):  at com.android.internal.view.menu.MenuBuilder.dispatchMenuItemSelected(MenuBuilder.java:735)
12-06 11:44:49.464: E/AndroidRuntime(13687):  at com.android.internal.view.menu.SubMenuBuilder.dispatchMenuItemSelected(SubMenuBuilder.java:81)
12-06 11:44:49.464: E/AndroidRuntime(13687):  at com.android.internal.view.menu.MenuItemImpl.invoke(MenuItemImpl.java:149)
12-06 11:44:49.464: E/AndroidRuntime(13687):  at com.android.internal.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:874)
12-06 11:44:49.464: E/AndroidRuntime(13687):  at com.android.internal.view.menu.MenuDialogHelper.onClick(MenuDialogHelper.java:193)
12-06 11:44:49.464: E/AndroidRuntime(13687):  at com.android.internal.app.AlertController$AlertParams$3.onItemClick(AlertController.java:934)
12-06 11:44:49.464: E/AndroidRuntime(13687):  at android.widget.AdapterView.performItemClick(AdapterView.java:301)
12-06 11:44:49.464: E/AndroidRuntime(13687):  at android.widget.AbsListView.performItemClick(AbsListView.java:1280)
12-06 11:44:49.464: E/AndroidRuntime(13687):  at android.widget.AbsListView$PerformClick.run(AbsListView.java:3067)
12-06 11:44:49.464: E/AndroidRuntime(13687):  at android.widget.AbsListView$1.run(AbsListView.java:3968)
12-06 11:44:49.464: E/AndroidRuntime(13687):  at android.os.Handler.handleCallback(Handler.java:615)
12-06 11:44:49.464: E/AndroidRuntime(13687):  at android.os.Handler.dispatchMessage(Handler.java:92)
12-06 11:44:49.464: E/AndroidRuntime(13687):  at android.os.Looper.loop(Looper.java:137)
12-06 11:44:49.464: E/AndroidRuntime(13687):  at android.app.ActivityThread.main(ActivityThread.java:4943)
12-06 11:44:49.464: E/AndroidRuntime(13687):  at java.lang.reflect.Method.invokeNative(Native Method)
12-06 11:44:49.464: E/AndroidRuntime(13687):  at java.lang.reflect.Method.invoke(Method.java:511)
12-06 11:44:49.464: E/AndroidRuntime(13687):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1036)
12-06 11:44:49.464: E/AndroidRuntime(13687):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:803)
12-06 11:44:49.464: E/AndroidRuntime(13687):  at dalvik.system.NativeStart.main(Native Method)
12-06 11:44:50.954: I/Process(13687): Sending signal. PID: 13687 SIG: 9

 

 

 

 

 

 

 

 

 

 

 

 

 

 

package com.example.effect_project;

import java.io.File;

import android.app.Activity;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.ColorMatrix;
import android.graphics.ColorMatrixColorFilter;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.provider.MediaStore;
import android.provider.MediaStore.Images;
import android.view.Menu;
import android.view.MenuItem;
import android.view.SubMenu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ImageView;

public class MainActivity extends Activity implements OnClickListener {

 

 private Uri mImageCaptureUri;
 private ImageView background;
 static int REQUEST_PHOTO_ALBUM = 0;
 static int REQUEST_GRAYSCALE = 1;
 static String SAMPLEIMG = "back.bmp";
 Uri imageUri;
 Bitmap photo;
 int height, width;
 String imagePath;
 Bitmap image;
 //int[] pix = new int[height * width];
 Canvas C = new Canvas();

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

  background = (ImageView) findViewById(R.id.back_ground);
 }

 

 @Override
 public boolean onCreateOptionsMenu(Menu menu) {
  getMenuInflater().inflate(R.menu.activity_main, menu);

  MenuItem item = menu.add(0,1,0,"불러오기");
  SubMenu sub = menu.addSubMenu("효과");
  menu.add(0,2,0,"저장");
  sub.add(0,3,0,"그레이");
  sub.add(0,4,0,"반전");
  sub.add(0,5,0,"이진화");
  sub.add(0,6,0,"수채화");
  return true;
 }

 public boolean onOptionsItemSelected(MenuItem item){
  switch(item.getItemId()){
  case 1:

   photoAlbum();

   break;

  case 2:

   break;
  case 3:
   setGrayScale(background);
   //return true;
   break;
  case 4:
  break;
  case 5:
   setBinary(image);

   break;


  }
  return false;
 }


 private void setBinary(Bitmap src) {
  
  width = background.getWidth();
  height= background.getHeight();
  
  
 // Bitmap mbitmap = Bitmap.createBitmap(src.getWidth(), src.getHeight(), src.getConfig());
  //setGrayScale(background);
  
 /* for( int y = 0 ; y < height ; y++ )
  {
   for( int x = 0 ; x < width ; x++ )
   {
    int rValue = background.getPixel(x, y) & 0x000000ff;
    if( rValue > 127 )
    {
     photo.setPixel(x, y, Color.argb(255,0,0,0) );
    }
    else photo.setPixel(x, y, Color.argb(255,255,255,255) );
   }
  }
  */
  
 }
 
 public void setGrayScale(ImageView v){
  ColorMatrix matrix = new ColorMatrix();
  matrix.setSaturation(0);      //0이면 grayscale
  ColorMatrixColorFilter cf = new ColorMatrixColorFilter(matrix);
  v.setColorFilter(cf);
 }
 public Bitmap setInvert(Bitmap src){
  
  Bitmap bmOut = Bitmap.createBitmap(src.getWidth(), src.getHeight(), src.getConfig());
  
  int A,R,G,B;
  int pixelColor;
  
  height = src.getHeight();
  width = src.getWidth();
  
  
  for(int y = 0;y<height; y++){
   for(int x = 0;x<width;x++){
    pixelColor = src.getPixel(x, y);
    
    A = Color.alpha(pixelColor);
    
    R = 255 - Color.red(pixelColor);
    G = 255 - Color.green(pixelColor);
    B = 255 - Color.blue(pixelColor);
    
    bmOut.setPixel(x, y, Color.argb(A,R,G,B));
   }
  }
  
  return bmOut;

 

 }
 public void onClick(View v){
  // TODO Auto-generated method stub
 }
 void photoAlbum() {
  
  File photo = new File(Environment.getExternalStorageDirectory(),   ".camera.bmp");

  imageUri = Uri.fromFile(photo);
  
  Intent intent = new Intent(Intent.ACTION_PICK);
  intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);
  intent.setType(Images.Media.CONTENT_TYPE);
  intent.setData(Images.Media.EXTERNAL_CONTENT_URI);
  startActivityForResult(intent, REQUEST_PHOTO_ALBUM);
 }
  protected void onActivityResult(int requestCode, int resultCode, Intent data) {
  // TODO Auto-generated method stub
  super.onActivityResult(requestCode, resultCode, data);

  if(resultCode != RESULT_OK)
   return;

  if(requestCode == REQUEST_PHOTO_ALBUM) {

   height = background.getHeight();
   width = background.getWidth();
   
  
   
   setCanvas(data);
  }
  
 }


 public void setCanvas(Intent data){
  background.clearColorFilter();
  background.setImageURI(data.getData());

 }

}