일단 그레이스케일까지는 문제없이 진행됩니다만,...
이진화에서 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());
}
}