Bild mit der Camera API machen

  • Antworten:13
Gelöschter Account
  • Forum-Beiträge: 20

06.09.2014, 17:37:01 via Website

Guten Tag,

ich versuche mich gerade ein wenig in die API der Camera reinzufuchsen, aber irgendwie klappt das ganze nicht so wie es laut Code und Doku sollte.
Habe den ganzen Code jetzt schon so reduziert, dass eigentlich kein Fehler mehr auftreten dürfte:

package com.example.camera;

import android.support.v7.app.ActionBarActivity;
import android.content.pm.PackageManager;
import android.hardware.Camera;
import android.hardware.Camera.PictureCallback;
import android.os.Bundle;
import android.view.View;
import android.widget.Toast;

public class MainActivity extends ActionBarActivity implements PictureCallback 
{
     private Camera camera;

      @Override
      public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // do we have a camera?
        if (!getPackageManager()
            .hasSystemFeature(PackageManager.FEATURE_CAMERA)) 
        {
          Toast.makeText(this, "No camera on this device", Toast.LENGTH_LONG)
              .show();
        } 
        else 
    {
           System.out.println("Device found");
        camera = Camera.open();
    }
  }

  public void onClick(View view) 
  {
    System.out.println("On Click Event");
    camera.takePicture(null, null, this);
  }

@Override
public void onPictureTaken(byte[] data, Camera camera) 
{
    System.out.println("Hey there's data");

}
}

An sich läuft die App anstandslos, macht nur nicht das was sie soll. Die Ausgabe "Device found" und "On Click Event" (Wenn ich auf einen Button drücke, der in der activity_main definiert ist) wird auch im Logcat ausgegeben, nur das "Hey there's data" kommt einfach nicht.

Übersehe ich jetzt das offensichtliche, oder wird das Event "onPictureTaken" wirklich nicht getriggert?

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

06.09.2014, 17:42:44 via Website

 camera.takePicture(null, null, this);

Warum 2 mal null übergeben, das sieht nicht richtig aus.

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Gelöschter Account
  • Forum-Beiträge: 20

06.09.2014, 17:49:33 via Website

Weil ich ja nur den Callback für die Bilddaten haben möchte und nicht die Rawdaten oder das Event vom Auslöser.
Her mal die genaue Beschreibung:

void android.hardware.Camera.takePicture(ShutterCallback shutter, PictureCallback raw, PictureCallback jpeg)

Wenn ich die ersten beiden nicht null übergeben würde, würde Java meckern das zu wenig Argumente übergeben worden sind.

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

06.09.2014, 18:20:30 via Website

Hast du dafür ein tut benutzt?

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Gelöschter Account
  • Forum-Beiträge: 20

06.09.2014, 18:29:33 via Website

Jaein. Habe mich an diese Seite gehalten: vogella.com/tutorials/AndroidCamera/article.html (Aus irgendeinem Grund darf ich keine Links Posten)

Habe auch einfach mal copy&paste versucht. Selbst dann Triggert er "onPictureTaken" nicht.

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

06.09.2014, 18:33:01 via Website

Das problem hatten wir hier erst im Forum.
KP ob der damalige TE das Problem lösen konnte.
Für was brachst du denn das?
Würde dir auch ein Kameraintent u normalen Kameraapp reichen?

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Gelöschter Account
  • Forum-Beiträge: 20

06.09.2014, 18:39:49 via Website

Es geht sich um keine bestimmte App. Es geht einfach nur darum so etwas gemacht zu haben und zu verstehen wie das ganze Funktioniert.

Den Intent mit der normalen Kameraapp habe ich schon lange hin bekommen, aber das ist jaa langweilig :) Außerdem muss sowas auch funktionieren, bin ja nicht der erste, der so etwas versucht.

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

06.09.2014, 18:45:05 via Website

Du hast ja recht, aber da habe ich gerade keine Ahnung
Vlt nen bissl nach dem problem suchen

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Gelöschter Account
  • Forum-Beiträge: 20

06.09.2014, 18:59:01 via Website

Ja klar aber wonach soll man da suchen? "... Triggert nicht" ist bei Google sehr wage.
Na ja Danke für die Hilfe.

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

06.09.2014, 19:12:24 via Website

Na ja auf Englisch gibts mehr Lösungen als auf Deutsch..

Hier noch nen tut. Vlt hilft dir:
https://thenewcircle.com/s/post/39/using__the_camera_api

PS: könntest ja testweise die beiden callbacks einbauen, musst diese ja nicht auswerten. Nur dass sie vorhanden sind, könnte ja daran liegen

— geändert am 06.09.2014, 19:12:41

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Gelöschter Account
  • Forum-Beiträge: 20

06.09.2014, 19:16:03 via Website

Danke. Werde ich nachher mal versuchen und werde mich nochmal melden ob es funktioniert.

Antworten
Gelöschter Account
  • Forum-Beiträge: 20

06.09.2014, 21:14:55 via Website

So hab mich nochmal rangesetzt:
Das Beispiel was du gepostet hattest funktioniert so nicht und ich bekomme auch nicht raus voran es liegt (Direkt am Anfang eine IOException und der Logcat zeigt auf eine Kommentarzeile)

Habe auch mal probiert alle drei Events abzufangen aber auch Pustekuchen. Er Triggert "onPictureTaken".

Da der Logcat in Eclipse manchmal rumbuggt, habe ich mir das ganze mal per adb logcat ausgeben lassen:

Dort sehe ich auf Jedenfalls das die Kamera etwas macht wenn ".takePicture()" aufgerufen wird:

V/CameraWrapper(30379): ae-bracket-hdr=Off;ae-bracket-hdr-values=Off,AE-Bracket;anti-shake=0;antibanding=off;antibanding-values=off,60hz,50
hz,auto;auto-exposure-lock=false;auto-exposure-lock-supported=true;auto-exposure-values=matrix,center,spot;auto-whitebalance-lock=false;aut
o-whitebalance-lock-supported=true;brightness-step=1;camera-mode=0;contrast=5;contrast-step=1;denoise=denoise-on;denoise-values=denoise-off
,denoise-on;dis=disable;dis-values=enable,disable;dual_mode=0;dualrecording-hint=0;effect=none;effect-values=none,mono,negative,solarize,se
pia,posterize,whiteboard,blackboard,aqua,emboss,sketch,neon;exif_exptime=0;exif_iso=0;exposure-compensation=0;exposure-compensation-step=0.
5;face-detection=off;face-detection-values=off,on;face-recognition=off;face-recognition-values=off,on;fast-fps-mode=0;firmware-mode=none;fl
ash-mode=off;flash-mode-values=off;flip-mode-values=off,flip-v,flip-h,flip-vh;fnumber-value-denominator=100;fnumber-value-numerator=245;foc
al-length=1.85;focallength-35mm-value=27;focallength-value-denominator=100;focallength-value-numerator=185;focus-distances=0.10,0.90,Infini
ty;focus-mode=fixed;focus-mode-values=fixed;hdr-need-1x=false;hfr-size-values=2072x1166,2072x1166,1280x720,1280x720;histogram=disable;histo
gram-values=enable,disable;horizontal-view-angle=69.7;intelligent-mode=0;iso=auto;iso-values=auto;jpeg-quality=85;jpeg-thumbnail-height=288
;jpeg-thumbnail-quality=85;jpeg-thumbnail-size-values=512x288,480x288,256x154,432x288,512x384,352x288,320x240,176x144,0x0;jpeg-thumbnail-wi
dth=512;lensshade=enable;lensshade-values=enable,disable;llv_mode=0;luma-adaptation=3;max-brightness=6;max-contrast=10;max-exposure-compens
ation=4;max-num-detected-faces-hw=2;max-num-detected-faces-sw=2;max-num-focus-areas=0;max-num-metering-areas=10;max-saturation=10;max-sce-f
actor=100;max-sharpness=36;max-zoom=63;maxaperture-value-denominator=100;maxaperture-value-numerator=259;mce=enable;mce-values=enable,disab
le;metering=center;metering-areas=(0,0,0,0,0);min-brightness=0;min-contrast=0;min-exposure-compensation=-4;min-saturation=0;min-sce-factor=
-100;min-sharpness=0;num-snaps-per-shutter=1;picture-format=jpeg;picture-format-values=jpeg,bayer-qcom-10gbrg,bayer-qcom-10grbg,bayer-qcom-
10rggb,bayer-qcom-10bggr,bayer-mipi-10gbrg,bayer-mipi-10grbg,bayer-mipi-10rggb,bayer-mipi-10bggr,yuv422sp;picture-size=1920x1080;picture-si
ze-values=1920x1080,1440x1080,1280x960,1280x720,960x720,720x480,640x480,320x240;preferred-preview-size-for-video=1920x1080;preview-flip=off
;preview-format=yuv420sp;preview-format-values=yuv420sp,yuv420p;preview-fps-range=7000,30000;preview-fps-range-values=(7000,30000);preview-
frame-rate=30;preview-frame-rate-values=15,30;preview-size=1920x1080;preview-size-values=1920x1080,1440x1080,1280x720,1056x864,960x720,720x
480,640x480,352x288,320x240,176x144;qc-camera-features=542;qc-max-num-requested-faces=2;raw-size=1936x1090;redeye-reduction=disable;redeye-
reduction-values=enable,disable;saturation=5;saturation-step=1;sce-factor-step=10;scene-detect=off;scene-detect-values=off,on;scene-mode=au
to;scene-mode-values=auto,asd,landscape,snow,beach,sunset,night,portrait,backlight,sports,steadyphoto,flowers,candlelight,fireworks,party,n
ight-portrait,theatre,action,AR;selectable-zone-af=auto;selectable-zone-af-values=;sharpness=36;sharpness-step=6;shot-mode=0;skinToneEnhanc
ement=0;skinToneEnhancement-values=enable,disable;smart-screen-exposure=0;smart-screen-exposure-values=vision-ae-normal,vision-ac-backlight
;smooth-zoom-supported=false;snapshot-picture-flip=off;supported-live-snapshot-sizes=1920x1080,1440x1080,1280x768,1280x720,1024x768,800x600
,800x480,800x450,720x480,640x480,352x288,320x240,176x144;supported-shot-modes=normal-shot,panorama-burst;touch-af-aec=touch-off;touch-af-ae
c-values=touch-off,touch-on;vertical-view-angle=42.7;video-flip=off;video-frame-format=yuv420sp;video-hfr=off;video-hfr-values=;video-size=
1920x1080;video-size-values=1920x1080,1440x1080,1280x720,960x720,800x450,720x480,640x480,352x288,320x240,176x144;video-snapshot-supported=f
alse;video-stabilization-supported=false;vtmode=0;whi

Das ganze sieht nur nach den ganzen Parametern der Kamera aus, aber danach wird es interessant:

V/CameraWrapper(30379): camera_put_parameters
V/CameraWrapper(30379): camera_put_parameters->B796C720->B797E1F0
V/CameraWrapper(30379): camera_take_picture
V/CameraWrapper(30379): camera_take_picture->B796C720->B797E1F0
W/QCamera2HWI(30379): take_picture
I/QCamera2HWI(30379): [KPI Perf] take_picture_thread: E
W/QCamera2HWI(30379): [KPI Perf] take_picture_internal: E
W/QCamera2HWI(30379): take_picture_internal Flash Mode=0, LLS mode=0, Auto LLS mode=0, NumOfSnaps=1
I/QCamera2HWI(30379): take_picture_internal: start capture
E/QCameraStateMachine(30379): int32_t qcamera::QCameraStateMachine::procEvtPreviewStoppedState(qcamera::qcamera_sm_evt_enum_t, void*): cann
ot handle evt(19) in state(0)
W/QCamera2HWI(30379): [KPI Perf] take_picture_internal: X, ret -38
I/QCamera2HWI(30379): [KPI Perf] take_picture_thread: X

Also laut der Nachricht oben ist die Lage für mich klar: Die Daten werden von der Kamera abgefragt und das nicht nur einmal. Wo jetzt aber was aufgerufen wird, wird leider nicht weiter geloggt.

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

06.09.2014, 22:16:11 via App

Wenn ein Fehler auftritt dann müsste doch ein ExceptionLog mit Zeile erscheinen.

Hast du mal die App zum diwnload probiert ob diese Funktioniert?
Gibts da eigentlich ne Manifest Permission für.
Vlt liegts daran.

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Ludy
  • Admin
  • Forum-Beiträge: 7.958

07.09.2014, 05:50:34 via App

Pascal P.

...
Gibts da eigentlich ne Manifest Permission für.
Vlt liegts daran.

Also die Permission sollt gesetzt werden da das Objekt Camera genutzt wird.

Gruß Ludy (App Entwickler)

Mein Beitrag hat dir geholfen? Lass doch ein "Danke" da.☺

☕ Buy Me A Coffee ☕

Lebensmittelwarnung-App

✨Meine Wunschliste✨

📲Telegram NextPit News📲

Antworten