1. Nimm jetzt an unserem Uhans - 3. ADVENT - Gewinnspiel teil - Alle Informationen findest Du hier!

Camera Pixels verändern sich

Dieses Thema im Forum "Android App Entwicklung" wurde erstellt von Büffel, 06.11.2011.

  1. Büffel, 06.11.2011 #1
    Büffel

    Büffel Threadstarter Neuer Benutzer

    Beiträge:
    2
    Erhaltene Danke:
    0
    Registriert seit:
    06.11.2011
    Phone:
    Nexus S
    Servus Leute

    Ich habe ein Problem. Die größe meines Bildes bleiben nicht wie eingestellt die gleiche Größe.

    Aufgabe ist, dass die Parameter des PictureSize 2560x1920 sind. Wenn ich aber die Länge meines byte[] auslese steht da 355376.

    Warum ist das so? Ich verstehe es nicht und finde nicht den Fehler. Ich finde auch keinen Bezug zwischen 4915200 (=2560x1920) und 355376. Wäre super wenn mir jemand helfen könnte.

    Code:
    ...
    public class Kamera extends Activity implements Callback{
        SurfaceView mSurfaceView;
        Camera mCamera;
        boolean ontouchevent = false;
        
        @Override
        protected void onCreate(Bundle savedInstanceState){
            super.onCreate(savedInstanceState);
            requestWindowFeature(Window.FEATURE_NO_TITLE);
            setContentView(R.layout.camera_hardware);
            mSurfaceView = (SurfaceView) findViewById(R.id.sv_hardware_kamera);
            mSurfaceView.getHolder().addCallback(this);
            mSurfaceView.getHolder().setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
        }
    
        @Override
        public boolean onTouchEvent(MotionEvent event) {
            
            PictureCallback pc = new PictureCallback() {
                
                public void onPictureTaken(byte[] data, Camera camera) {
                    try
                    {
                        System.out.println("Bild bekommen. es ist " + data.length + " lang");
                        Main.byte_bild = data;
                        ontouchevent = false;
                        finish();
                    }
                    catch(Exception e)
                    {
                        System.out.println(e.getStackTrace());
                    }
                }
            };
            System.out.println("on touch event");
            if (!ontouchevent)
            {
                ontouchevent = true;
                mCamera.takePicture(null, null, pc);
            }
            return super.onTouchEvent(event);
        }
    
        public void surfaceChanged(SurfaceHolder holder, int format, int width,
                int height) {
    ...
        }
    
        public void surfaceCreated(SurfaceHolder holder) {
            mCamera = Camera.open();
            Parameters parameter = mCamera.getParameters();
            parameter.setJpegQuality(100);
            //parameter.setPictureSize(Main.picture_width, Main.picture_height);
            List<Camera.Size> s = mCamera.getParameters().getSupportedPictureSizes();
            Camera.Size best_size = null;
            for(Camera.Size ding : s)
            {
                if (best_size == null)
                {
                    best_size = ding;
                }else
                {
                    if(best_size.height < ding.height)
                    {
                        best_size = ding;
                    }
                }
            }
            Main.picture_height = best_size.height;
            Main.picture_width = best_size.width;
            System.out.println("Die beste Picture Qualität ist: " + best_size.width + "x" + best_size.height);
            parameter.setPictureSize(best_size.width, best_size.height);
            parameter.setPictureFormat(PixelFormat.JPEG);
            mCamera.setParameters(parameter);
            parameter = mCamera.getParameters();
            System.out.println(parameter.getPictureFormat());
            try {
                mCamera.setPreviewDisplay(holder);
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            
        }
    
        public void surfaceDestroyed(SurfaceHolder holder) {
    ...
        
        
    }
    
     
  2. Büffel, 07.11.2011 #2
    Büffel

    Büffel Threadstarter Neuer Benutzer

    Beiträge:
    2
    Erhaltene Danke:
    0
    Registriert seit:
    06.11.2011
    Phone:
    Nexus S
    Problem gelöst! Es ist das komplette Bild. Somit bekommt man das Bild als Bitmap und kann sich dieses angucken.

    Bitmap bmp = BitmapFactory.decodeByteArray(byte_bild, 0, byte_bild.length);
     

Diese Seite empfehlen