Foto mit der internen Kamera


Falls das Endgerät die MMAPI nur unvollständig Implementiert (siehe Kapitel 3.4.1), oder eine Exception im Verlauf des Erzeugens des Video-Items ( z. B. wegen zu geringem Speicher ) geworfen wird, wird versucht die Form F_Filebrowser anzuzeigen, welche die Auswahl eines Bildes aus dem Filesystem ermöglicht. Somit hat der Benutzer die Möglichkeit, ein bestehendes Foto von der Speicherkarte oder dem internen Speicher des Telefons zu laden. Falls die FileConnection API auf dem Endgerät nicht implementiert ist, gibt die Abfrage des zugehörigen System-Propertys null zurück – dann wird ein StringItem mit einer Fehlermeldung dargestellt.

Das Command CMD_SHOOT löst den Aufruf der Methode doSnapshot() aus, welche einen anonymen Thread erzeugt, der das aktuelle Bild der Kamera speichert und als i_captureitem in die Form unter dem Videobild einhängt. Da die Methode getSnapshot() der VideoControl blockiert, muss sie nebenläufig ausgeführt werden – ansonsten treten Probleme, z. B. beim Bestätigen von Sicherheitswarnungen auf.

Aus dem byte[] mit den Bilddaten wird ein Image erzeugt, welches vor der Darstellung auf der Form mit der Methode makeThumb() der Klasse n3po.core.MMUtil an die Größe des Displays angepasst wird. Falls dem Benutzer das geschossene Foto nicht zusagt, hat er die Möglichkeit, weitere Fotos zu schießen, die dann jeweils das vorhergehende Bild ersetzen, bis er zur endgültigen Auswahl den Menüpunkt „speichern“ wählt, welcher als ItemCommand an i_captureitem gebunden wurde.

Aufnahme des Fotos:

[sourcecode language=’java’]

private void doSnapshot() {
new Thread() {
public void run() {
try {
vidc = (VideoControl) player.getControl(“VideoControl”);
snap = vidc.getSnapshot(null);

if (snap != null) {
mypic = Image.createImage(snap, 0, snap.length);
mypic = n3po.core.MMUtil.getInstance().resizeImage(mypic,getWidth());
i_captureitem = new ImageItem(“”, mypic, 0, “”);
i_captureitem.setLayout(Item.LAYOUT_CENTER|Item.LAYOUT_VCENTER|Item.LAYOUT_2);
i_captureitem.setItemCommandListener(F_Identity_Photo.getInstance(parentDisplay));
i_captureitem.addCommand(CMD_SAVE);

if (i_captureitem != null){
delete(1);
append(i_captureitem);
}
else {
append(i_captureitem);

}
}
} catch (Exception me) {
CoreMidlet.getInstance().gui_log(“F_Photo:”,”Exception beim ImageCapture
“+me.getMessage());
}
}
}.start();
}
[/sourcecode]

Foto mit der internen Kamera


F_Identity F_Identity_Photo F_Filebrowser

Die Klasse F_Filebrowser greift mit den Methoden showCurrDir(), changeDirectory() und showFile() auf das FileConnection optional Package ( JSR 75 ) zurück, um die Verzeichnisstruktur des Dateisystems darzustellen.

Für die optische Unterscheidung zwischen Verzeichnissen und Files werden zwei Icons aus dem Jar-Archiv nachgeladen ( /images/dir.png bzw. /images/file.png ), welche vor den File- bzw. Verzeichnisnamen angezeigt werden. F_Filebrowser zeigt zunächst das Root-Directory des Mobiltelefons an ( file://localhost/ ), falls keine Exception geworfen wird. Im Fehlerfall wird eine dementsprechende Meldung angezeigt und zur Form F_Identity zurückgewechselt.

Die commandAction() – Methode des CommandListener-Interfaces prüft nach einer Auswahl des Benutzers, ob es sich bei der Auswahl um ein Verzeichnis oder ein File handelt und ruft die dementsprechenden Methoden auf.

Der Aufruf der Methode showDirectory() erzeugt einen anonymen Thread, welcher in einer Schleife die Dateien und Verzeichnisse, welche sich im neu gewählten Verzeichnis befinden, als Elemente in eine Liste einfügt und diese anzeigt. Zum Wechseln der Verzeichnisse dient die Methode changeDirectory(), welche zunächst prüft ob das aktuelle Verzeichnis der System-Root ist und das Wechseln in ein übergeordnetes Verzeichnis möglich ist. Falls es sich beim fileName – Bezeichner um UP_DIRECTORY handelt, wird ein Verzeichnis zurückgesprungen ( falls möglich ), ansonsten der Inhalt der gewählten Directory durch den Aufruf von showDirectory() angezeigt.

Die Auswahl und das Einlesen eines Files vom Dateisystem erfolgt durch den Aufruf der Methode showFile(), welche das zu öffnende File in ein byte[], in Kilobyteblöcken einliest, im Recordstore speichert und zur Form F_Identity zurückwechselt, welche die Anzeige des Fotos übernimmt.


Weiter zu Teil 3: Implementierung der GUI



Ähnliche Artikel zu "Foto mit der internen Kamera":


Wenn Du noch Fragen zum Thema Foto mit der internen Kamera hast, dann schreib einfach einen Kommentar - oder schau dir meine Buchtipps an:

Wie ist DEINE Meinung zum Thema Foto mit der internen Kamera?

Schreib sie einfach als Kommentar:

You must be logged in to post a comment.




karbacher.org © Foto mit der internen Kamera