Masalah

Untuk menghindari kesalah pahaman, saya tegaskan di awal bahwa artikel ini khusus untuk programmer Blackberry. Di blog saya yang lain, topik ini adalah topik yang paling hangat. Mengambil foto dengan kamera Blackberry (dengan pemrograman) sebenarnya bisa dilakukan dengan 2 cara, yaitu dengan menggunakan aplikasi native camera milik Blackberry (yang akan dibahas di sini) dan dengan class VideoControl (bawaan J2ME).

Keuntungan menggunakan cara ini, dibandingkan dengan VideoControl antara lain:

  • User sudah terbiasa menggunakan aplikasi kamera bawaan Blackberry
  • Kamera bisa di zoom in dan zoom out
  • Karena tidak menggunakan class-class seperti VideoControl dan class-class lain yang dibutuhkan, nampaknya cara ini akan menghasilkan program yang lebih kecil ukurannya

Solusi

Idenya sederhana. Aplikasi kita memanggil aplikasi native (bawaan) Blackberry dengan menggunakan Invoke API. Kemudian, ketika terjadi penambahan file ke dalam file system Blackberry, akan muncul event yang menyatakan perubahan file jurnal. Event ini dapat ditangkap dengan interface FileSystemJournalListener, sehingga kita bisa dapatkan path file terbaru tersebut (yang bisa kita yakini berasal dari aplikasi kamera). Setelah kita dapatkan path file-nya, kita akan rekonstruksi file tersebut menjadi objek EncodedImage, sehingga bisa kita gunakan secara leluasa di dalam aplikasi.

Agar lebih memahami konsep ini, sebaiknya Anda mengunduh 6 file yang telah saya siapkan dalam repository saya di GitHub. Anda bisa download melalui link ini https://github.com/amrishodiq/Blackberry-Development-Tutorial/tree/master/TakingPicture/src/com/durianberry/takingpicture.

Untuk menggunakan class-class yang telah saya buat tersebut, cukup mudah. Perhatikan contoh berikut:

/**
* To use this example, you need to grap my repository on
* https://github.com/amrishodiq/Blackberry-Development-Tutorial/tree/master/TakingPicture/src/com/durianberry/takingpicture
*/
public final class TakingPictureScreen extends MainScreen implements
PictureTakerListener, FieldChangeListener {
private ButtonField button;
private BitmapField photoField;

public TakingPictureScreen() {
setTitle("Taking Picture");

button = new ButtonField("Take Picture", ButtonField.CONSUME_CLICK);
button.setChangeListener(this);
add(button);

photoField = new BitmapField();
add(photoField);
}

public void fieldChanged(Field field, int context) {
if (field == button) {
PictureTaker.get().setListener(this);
PictureTaker.get().takePicture();
}
}

public void onPictureCaptured(EncodedImage image) {
photoField.setImage(ImageTools.scaleImageToWidth(image, Display.getWidth()));
}
}

Anda cukup memperhatikan bahwa class screen di atas meng-implement interface PictureTakerListener. Di dalam interface tersebut terdapat method onPictureCaptured(), Anda bisa menerima object EncodedImage Anda di sana. Sangat mudah bukan?

Selamat mencoba.

September 23, 2011

Leave a Reply

Your email address will not be published. Required fields are marked *

*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Mobile and Web Analytics