gpt4 book ai didi

java-me - 无法使用诺基亚手机捕捉图像但在计算机应用程序中工作正常?

转载 作者:行者123 更新时间:2023-12-04 05:48:17 25 4
gpt4 key购买 nike

我正在制作一个应用程序,用户可以在其中使用相机,捕获该图像并将其保存到 C 驱动器,并且当我在我的 PC 上使用此应用程序时,我也可以执行所有这些操作。

但是,每当我在移动设备中使用此应用程序(例如诺基亚 C2-01,02,03)时,我只能查看相机,但无法在使用移动设备运行此应用程序时进行短时间捕捉无法正常工作。

我的 Midlet 代码如下,请查看问题并支持我通过移动设备捕获图像:-

public class CaptureAndSaveImage 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 CaptureAndSaveImage() {
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(checkPngEncodingSupport() == false) {
throw new Exception("Png encoding is not supported!");
}

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

// 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.png";
// 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 checkPngEncodingSupport() {
String encodings = System.getProperty("video.snapshot.encodings");
return (encodings != null) && (encodings.indexOf("png") != -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();
}
}
}

最佳答案

也许您应该尝试在 captureAndSaveImage() 的 try-catch 块中捕获 OutOfMemoryError(更好地捕获 Throwable,它也会捕获它而不是异常)

您还可能希望查看 fileName 以确保它尝试保存在正确的目录中

    showAlert("fileName", fileName, this);
// Open file

关于java-me - 无法使用诺基亚手机捕捉图像但在计算机应用程序中工作正常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10408359/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com