두번째 소스는 카메라 촬영 소스인데요 이소스에
특정 컬러값을 카운트하는 소스를 같이 동작하게 하고 싶어서 질문드립니다.
카메라 소스안에 이소스를 매소드화 시켜서 결과값이 나오게 하고싶은데요
제가 씨언어 기초 정도밖에 개념이 아직없어서 매소드나 클래스 처리가 좀
미비해서 그러니 조언좀 해셨으면 좋겠습니다.
픽셀 카운트 예제.
int count = 0;//Counter to count pixels
Bitmap b = new Bitmap("123.jpg");//Getting the image.
Color c;
//Looping over all pixels
for (int i = 0; i < b.Width; i++)
{
for (int j = 0; j < b.Height; j++)
{
c = b.GetPixel(i, j);//Get the current pixel.
if (c.R == 153 && c.G == 184 && c.B == 226)//Checking pixel
{
count++;//increase counter
//Do what ever you want, you have got the pixel that have
// R = 153 AND G = 184 AND B = 226
}
}
}
카메라 소스 예제.
package pe.kr.theeye.cameracrop;
import java.io.File;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.graphics.Bitmap;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.provider.MediaStore;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ImageView;
public class CameraCropActivity extends Activity implements OnClickListener
{
private static final int PICK_FROM_CAMERA = 0;
private static final int PICK_FROM_ALBUM = 1;
private static final int CROP_FROM_CAMERA = 2;
private Uri mImageCaptureUri;
private ImageView mPhotoImageView;
private Button mButton;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mButton = (Button) findViewById(R.id.button);
mPhotoImageView = (ImageView) findViewById(R.id.image);
mButton.setOnClickListener(this);
}
/**
* 카메라에서 이미지 가져오기
*/
private void doTakePhotoAction()
{
/*
* 참고 해볼곳
* http://2009.hfoss.org/Tutorial:Camera_and_Gallery_Demo
* http://stackoverflow.com/questions/1050297/how-to-get-the-url-of-the-captured-image
* http://www.damonkohler.com/2009/02/android-recipes.html
* http://www.firstclown.us/tag/android/
*/
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
// 임시로 사용할 파일의 경로를 생성
String url = "tmp_" + String.valueOf(System.currentTimeMillis()) + ".jpg";
mImageCaptureUri = Uri.fromFile(new File(Environment.getExternalStorageDirectory(), url));
intent.putExtra(android.provider.MediaStore.EXTRA_OUTPUT, mImageCaptureUri);
// 특정기기에서 사진을 저장못하는 문제가 있어 다음을 주석처리 합니다.
//intent.putExtra("return-data", true);
startActivityForResult(intent, PICK_FROM_CAMERA);
}
/**
* 앨범에서 이미지 가져오기
*/
private void doTakeAlbumAction()
{
// 앨범 호출
Intent intent = new Intent(Intent.ACTION_PICK);
intent.setType(android.provider.MediaStore.Images.Media.CONTENT_TYPE);
startActivityForResult(intent, PICK_FROM_ALBUM);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
if(resultCode != RESULT_OK)
{
return;
}
switch(requestCode)
{
case CROP_FROM_CAMERA:
{
// 크롭이 된 이후의 이미지를 넘겨 받습니다.
// 이미지뷰에 이미지를 보여준다거나 부가적인 작업 이후에
// 임시 파일을 삭제합니다.
final Bundle extras = data.getExtras();
if(extras != null)
{
Bitmap photo = extras.getParcelable("data");
mPhotoImageView.setImageBitmap(photo);
}
// 임시 파일 삭제
File f = new File(mImageCaptureUri.getPath());
if(f.exists())
{
f.delete();
}
break;
}
case PICK_FROM_ALBUM:
{
// 이후의 처리가 카메라와 같으므로 일단 break없이 진행합니다.
// 실제 코드에서는 좀더 합리적인 방법을 선택하시기 바랍니다.
mImageCaptureUri = data.getData();
}
case PICK_FROM_CAMERA:
{
// 이미지를 가져온 이후의 리사이즈할 이미지 크기를 결정합니다.
// 이후에 이미지 크롭 어플리케이션을 호출하게 됩니다.
Intent intent = new Intent("com.android.camera.action.CROP");
intent.setDataAndType(mImageCaptureUri, "image/*");
intent.putExtra("outputX", 90);
intent.putExtra("outputY", 90);
intent.putExtra("aspectX", 1);
intent.putExtra("aspectY", 1);
intent.putExtra("scale", true);
intent.putExtra("return-data", true);
startActivityForResult(intent, CROP_FROM_CAMERA);
break;
}
}
}
@Override
public void onClick(View v)
{
DialogInterface.OnClickListener cameraListener = new DialogInterface.OnClickListener()
{
@Override
public void onClick(DialogInterface dialog, int which)
{
doTakePhotoAction();
}
};
DialogInterface.OnClickListener albumListener = new DialogInterface.OnClickListener()
{
@Override
public void onClick(DialogInterface dialog, int which)
{
doTakeAlbumAction();
}
};
DialogInterface.OnClickListener cancelListener = new DialogInterface.OnClickListener()
{
@Override
public void onClick(DialogInterface dialog, int which)
{
dialog.dismiss();
}
};
new AlertDialog.Builder(this)
.setTitle("업로드할 이미지 선택")
.setPositiveButton("take a picture", cameraListener)
.setNeutralButton("select", albumListener)
.setNegativeButton("cancel", cancelListener)
.show();
}}