Last Updated on 11 years by Mas Herdi
Hi guys, sudah lama saya tidak memposting tutorial di sini. Okay, kali ini saya akan membuat tutorial yang lumayan banyak ditanyakan oleh pembaca, yaitu cara bagaimana mengambil gambar atau foto di Android, menggunakan kamera bawaan atau native.
Untuk pengambilan gambar sendiri, ada dua cara yang bisa digunakan. Yaitu menggunakan kamera bawaan Android, atau membuat kelas kamera sendiri yang akan mengakses fungsi kamera dan mengambil gambar di Android. Cara kedua membutuhkan coding yang lebih advanced, karena itu cara paling simpel untuk mengakses kamera di Android adalah menggunakan cara pertama. Kita akan belajar cara mengambil gambar lewat kamera bawaan Android dan menampilkannya pada ImageView;
Take Picture Using Camera
Oke, pertama-tama kita buat sebuah project Android baru pada Eclipse. Setelah itu kita buat sebuah XML layout yang berisi satu tombol, dan satu ImageView bernama activity_camera.xml:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context="id.web.twoh.cameratutorial.CameraActivity" > <ImageView android:layout_alignParentTop="true" android:id="@+id/iv_camera" android:layout_width="400dp" android:layout_height="400dp" android:contentDescription="@string/hello_world" /> <Button android:id="@+id/bt_camera" android:layout_below="@id/iv_camera" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Ambil Gambar" /> </RelativeLayout>
Setelah itu, untuk meluncurkan kamera, kita perlu menggunakan suatu Intent khusus :
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
Dan kita juga perlu membuat sebuah unique request code yang menandakan bahwa aplikasi kita yang meminta request camera.
private static final int CAMERA_REQUEST_CODE = 7777;
Kemudian, kita perlu menangkap balikan dari request tersebut, pada method onActivityResult() :
switch (requestCode) { case(CAMERA_REQUEST_CODE) : if(resultCode == Activity.RESULT_OK) { // do something } break; }
Garis besarnya kira-kira seperti itu, kode lengkap pada Activity adalah sebagai berikut :
CameraActivity.java
package id.web.twoh.cameratutorial; import android.app.Activity; import android.content.Intent; import android.graphics.Bitmap; import android.os.Bundle; import android.provider.MediaStore; import android.util.Log; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.ImageView; public class CameraActivity extends Activity { private Button btCamera; private ImageView ivCamera; private static final String TAG = CameraActivity.class.getSimpleName(); private static final int CAMERA_REQUEST_CODE = 7777; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_camera); btCamera = (Button) findViewById(R.id.bt_camera); ivCamera = (ImageView) findViewById(R.id.iv_camera); btCamera.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { //intent khusus untuk menangkap foto lewat kamera Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); startActivityForResult(intent, CAMERA_REQUEST_CODE); } }); } @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); switch (requestCode) { case(CAMERA_REQUEST_CODE) : if(resultCode == Activity.RESULT_OK) { // result code sama, save gambar ke bitmap Bitmap bitmap; bitmap = (Bitmap) data.getExtras().get("data"); ivCamera.setImageBitmap(bitmap); } break; } } }
Yang terakhir, tambahkan camera permission pada Android Manifest.
<uses-feature android:name="android.hardware.camera"></uses-feature> <uses-permission android:name="android.permission.CAMERA"/>
Simpel bukan? Setelah gambar didapat, kalian bisa memasukkannya ke dalam objek Bitmap yang bisa dimodifikasi. 🙂
Demo
Ketika meluncurkan kamera :
Kemudian kita klik shutter camera dan ambil gambar, akan langsung kembali ke aplikasi
Ketika tombol “Ambil Gambar” diklik, akan meluncurkan kamera kembali seperti di atas.
code uda saya coba, ketika saya mencoba untuk mengambil gambar lewat camera, prosesnya berjalan lancar, tapi setelah itu gambar yang diambil tidak dapat ditampilkan, saya mendapat error/warning seperti ini,
04-29 12:00:43.662: W/IInputConnectionWrapper(27599): showStatusIcon on inactive InputConnection
Mohon Pencerahannya mas 😀
hah kok aneh banget ya error-nya. Itu sepertinya error dari Androidnya, bukan dari aplikasi mas. Coba cari error yang nama package = nama aplikasi
mas kalo misalkan kita photo nih, tapi namanya udah kita tentuin sendiri atau atur. jadi misalkan xxx_photo gitu, nah xxx itu kita yang tentuin gimana?
Bisa saja, tapi itu nanti berbeda mekanismenya
Maaf, numpang tanya gan. Kalau misalkan kita take gambar dari kamera kemudian disimpan ke dalam aplikasi database SQLite seperti pada modul SQLite agan gmn ya..? Mohon bimbingannya ya gan.. 🙂
gan kalo kita mau buat grayscale itu gambar yang diambil lgsg dari kamera gimana yaa?
ini coding utk grayscale
public Bitmap toGrayscale(Bitmap bmpOriginal){
int width, height;
height = bmpOriginal.getHeight();
width = bmpOriginal.getWidth();
Bitmap bmpGrayscale = Bitmap.createBitmap(width, height, Bitmap.Config.RGB_565);
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(bmpOriginal, 0, 0, paint);
return bmpGrayscale;
}
nah yang saya mau gambar yang diambil itu lgsg jadi grayscale.
bagaimana caranya ?
#ask
gan kalau mau ngatur resolusiny gmn ya jd biar lebih bagus gambarnya
Biasanya Itu tergantung kamera bawaannya gan resolusinya bagus apa ndak