Camera Pixels verändern sich

B

Büffel_re_22

Neues Mitglied
0
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) {
...
    
    
}
 
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);
 

Ähnliche Themen

A
Antworten
1
Aufrufe
583
swa00
swa00
B
Antworten
6
Aufrufe
1.051
jogimuc
J
M
Antworten
3
Aufrufe
161
moin
M
Zurück
Oben Unten