×

Discussion Board

Results 1 to 3 of 3
  1. #1
    Registered User
    Join Date
    Nov 2009
    Posts
    43

    Where should i change the code...??

    Hi,
    i have a program which captures an image from camera and saves it in BMP format, but this only works fine for N70 mobile it is not working on 7610 mobile...Why it is not working..What should i change in my code..?? It is saying "Unable get photos folder name"...Also i manually created Photos folder in mobile....What should i do.... MY CODE IS....

    import javax.microedition.midlet.MIDlet;
    import javax.microedition.lcdui.Display;
    import javax.microedition.lcdui.Displayable;
    import javax.microedition.lcdui.Form;
    import javax.microedition.lcdui.CommandListener;
    import javax.microedition.lcdui.Command;
    import javax.microedition.lcdui.Item;
    import javax.microedition.lcdui.Alert;

    import javax.microedition.media.Manager;
    import javax.microedition.media.Player;
    import javax.microedition.media.control.VideoControl;
    import javax.microedition.media.MediaException;

    import javax.microedition.io.Connector;
    import javax.microedition.io.file.FileConnection;

    import java.io.OutputStream;
    import java.io.IOException;

    public class CSMIDlet extends MIDlet implements CommandListener {

    private Display display;

    // Form where camera viewfinder is placed
    private Form cameraForm;

    // Command for capturing image by camera and saving it.
    // Placed in cameraForm.
    private Command cmdCapture;
    // Command for exiting from midlet. Placed in cameraForm.
    private Command cmdExit;

    // Player for camera
    private Player player;
    // Video control of camera
    private VideoControl videoControl;

    // Alert to be displayed if error occurs.
    private Alert alert;

    /**
    * Constructor.
    */
    public CSMIDlet() {
    InitializeComponents();
    }

    /**
    * Initializes components of midlet.
    */
    private void InitializeComponents() {
    display = Display.getDisplay(this);

    if(checkCameraSupport() == false) {
    showAlert("Alert", "Camera is not supported!", null);
    return;
    }

    try {
    createCameraForm();
    createCamera();
    addCameraToForm();
    startCamera();
    } catch(IOException ioExc) {
    showAlert("IO error", ioExc.getMessage(), null);
    } catch(MediaException mediaExc) {
    showAlert("Media error", mediaExc.getMessage(), null);
    }
    }

    /**
    * Creates and returns form where the camera control will be placed.
    */
    private void createCameraForm() {
    // Create camera form
    cameraForm = new Form("Camera");
    // Create commands for this form
    cmdCapture = new Command("Capture", Command.OK, 0);
    cmdExit = new Command("Exit", Command.EXIT, 0);
    // Add commands to form
    cameraForm.addCommand(cmdCapture);
    cameraForm.addCommand(cmdExit);
    // Set midlet as command listener for this form
    cameraForm.setCommandListener(this);
    }

    /**
    * Check camera support.
    * @return true if camera is supported, false otherwise.
    */
    private boolean checkCameraSupport() {
    String propValue = System.getProperty("supports.video.capture");
    return (propValue != null) && propValue.equals("true");
    }

    /**
    * Creates camera control and places it to cameraForm.
    * @throws IOException if creation of player is failed.
    * @throws MediaException if creation of player is failed.
    */
    private void createCamera() throws IOException, MediaException {
    player = Manager.createPlayer("capture://video");
    player.realize();
    player.prefetch();

    videoControl = (VideoControl)player.getControl("VideoControl");
    }

    /**
    * Adds created camera as item to cameraForm.
    */
    private void addCameraToForm() {
    cameraForm.append((Item)videoControl.
    initDisplayMode(VideoControl.USE_GUI_PRIMITIVE, null));
    }

    /**
    * Start camera player
    * @throws IOException if starting of player is failed.
    * @throws MediaException if starting of player is failed.
    */
    private void startCamera() throws IOException, MediaException {
    if(player.getState() == Player.PREFETCHED) {
    player.start();
    }
    }

    /**
    * Saves image captured by camera.
    */
    private void captureAndSaveImage() {
    FileConnection file = null;
    OutputStream outStream = null;

    try {
    if(checkBmpEncodingSupport() == false) {
    throw new Exception("Bmp encoding is not supported!");
    }

    // Capture image
    byte[] capturedImageData =
    videoControl.getSnapshot("encoding=bmp");

    // Get path to photos folder.
    String dirPhotos = System.getProperty("fileconn.dir.photos");
    if(dirPhotos == null) {
    throw new Exception("Unable get photos folder name");
    }

    String fileName = dirPhotos + "CapturedImage.bmp";
    // Open file
    file = (FileConnection)Connector.open(fileName,
    Connector.READ_WRITE);
    // If there is no file then create it
    if(file.exists() == false) {
    file.create();
    }
    // Write data received from camera while making snapshot to file
    outStream = file.openOutputStream();
    outStream.write(capturedImageData);

    showAlert("Info", "Image is saved in " + fileName, cameraForm);

    } catch(IOException ioExc) {
    showAlert("IO error", ioExc.getMessage(), cameraForm);
    } catch(MediaException mediaExc) {
    showAlert("Media error", mediaExc.getMessage(), cameraForm);
    } catch(Exception exc) {
    showAlert("Error", exc.getMessage(), cameraForm);
    } finally {
    // Try to close file
    try {
    if(outStream != null) {
    outStream.close();
    }
    if(file != null) {
    file.close();
    }
    } catch(Exception exc) {
    // Do nothing
    }
    }
    }

    /**
    * Checks png encoding support
    * @return true if png encoding is supported false otherwise.
    */
    private boolean checkBmpEncodingSupport() {
    String encodings = System.getProperty("video.snapshot.encodings");
    return (encodings != null) && (encodings.indexOf("bmp") != -1);
    }

    /**
    * From MIDlet.
    * Signals the MIDlet that it has entered the Active state.
    */
    public void startApp() {
    if ( videoControl != null ) {
    display.setCurrent(cameraForm);
    }
    }

    /**
    * From MIDlet.
    * Signals the MIDlet to enter the Paused state.
    */
    public void pauseApp() {
    // TODO: pause player if it is running.
    }

    /**
    * Performs exit from midlet.
    */
    public void exitMIDlet() {
    notifyDestroyed();
    }

    /**
    * Shows alert with specified title and text. If next displayable is not
    * specified then application will be closed after alert closing.
    * @param title - Title of alert.
    * @param message - text of alert.
    * @param nextDisp - next displayable. Can be null.
    */
    private void showAlert(String title, String message, Displayable nextDisp) {
    alert = new Alert(title);
    alert.setString(message);
    alert.setTimeout(Alert.FOREVER);

    if(nextDisp != null) {
    display.setCurrent(alert, nextDisp);
    } else {
    display.setCurrent(alert);
    alert.setCommandListener(this);
    }
    }

    /**
    * From MIDlet.
    * Signals the MIDlet to terminate and enter the Destroyed state.
    */
    public void destroyApp(boolean unconditional) {
    if(player != null) {
    player.deallocate();
    player.close();
    }
    }

    /**
    * From CommandListener.
    * Indicates that a command event has occurred on Displayable displayable.
    * @param command - a Command object identifying the command.
    * @param displayable - the Displayable on which this event has occurred.
    */
    public void commandAction(Command command, Displayable displayable) {
    // Handles "Capture image" command from cameraForm
    if(command == cmdCapture) {
    captureAndSaveImage();
    }
    // Handles "exit" command from forms
    if(command == cmdExit) {
    exitMIDlet();
    }
    // Handle "ok" command from alert
    if(displayable == alert) {
    exitMIDlet();
    }
    }
    }

  2. #2
    Super Contributor
    Join Date
    Apr 2009
    Posts
    572

    Re: Where should i change the code...??

    I dont know about 7610 whther the photos folder exist or not and since you are saying that you have manually created the photos folder the System property dont result in path of that folder that you have manually created since it is not default and also System properties dont work on all handsets

    So what you can do at this point is

    1.....first check for default photos folder if it exist then work on it
    2.....If first point result in null then create a dynamic path where you want to store photos
    Regards,
    Saurabh

  3. #3
    Regular Contributor
    Join Date
    Oct 2007
    Location
    Pune
    Posts
    189

    Re: Where should i change the code...??

    Hello,

    As Nokia 7610 doesn't support image/bmp mime type.

    Is it mandatory for you take snaptshot in bmp?

    As both handsets supports jpeg you can take snapshots in jpeg format too.

    In your code modify this
    videoControl.getSnapshot("encoding=jpeg");
    Regards,
    Dinanath


    It's a matter of attitude.

Similar Threads

  1. XHTML+ECMAScript Onclick Change Colour code review
    By adamsimmonds in forum Browsing and Mark-ups
    Replies: 5
    Last Post: 2007-08-24, 06:24
  2. Replies: 5
    Last Post: 2007-05-05, 05:35
  3. Fixing a bug in an already obfuscated midlet (no source code) ?
    By SPGremlin in forum Mobile Java General
    Replies: 1
    Last Post: 2004-01-12, 21:52
  4. Can you change the profile from some code
    By Blkangel in forum Symbian
    Replies: 4
    Last Post: 2003-10-30, 17:51

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  
×