Thanks, that seems to work :)

On Feb 17, 4:24 pm, Streets Of Boston <[email protected]> wrote:
> In onPictureTaken, save the camera to a file and insert into the media
> content provider.
> Then, when the image has been inserted, instead of sending the raw
> binary data of the bitmap, send back the content-Uri of the image you
> took.
>
> On Feb 17, 3:07 am, Bart <[email protected]> wrote:
>
> > So I can never make camera images that are higher resolution then
> > 277x184? :S
> > If I stuff all the camera code into my main activity, then it should
> > work. But that's a little messy. Are you sure there isn't another way
> > to pass the camera images?
>
> > Thanks
>
> > On Feb 16, 10:05 pm, Streets Of Boston <[email protected]>
> > wrote:
>
> > > Binary data works upto about 100KByte. Anything larger, you very
> > > likely get that error.
>
> > > For images in RGB_565, this is about 277 x 184 pixels max (277 x 184 *
> > > 2 = 101936)
>
> > > On Feb 16, 4:17 am, Bart <[email protected]> wrote:
>
> > > > Hi, I have a problem with an app that lets the user take a picture.
> > > > I've posted it on some forums already, but nobody seems to recognize
> > > > the problem. Hopefully someone here knows a solution :)
>
> > > > I've put the code of taking a picture in a seperate activity. Then I
> > > > call the camera intent from my main activity using activityForResult.
> > > > In the camera intent, I use putExtra to return the camera image (as a
> > > > byte[] without doing anything to it). But when the program transitions
> > > > back from the camera intent to the parent intent that called it I get
> > > > aFailedBinderTransaction error in the logcat because the byte[] is
> > > > too big. But I don't understand this, because the image is not even
> > > > taken using the maximum resolution :S
>
> > > > The code of my camera intent is:
>
> > > > package example.imaging.ape;
>
> > > > import java.io.IOException;
> > > > import java.util.Iterator;
> > > > import java.util.Set;
>
> > > > import android.app.Activity;
> > > > import android.content.Intent;
> > > > import android.graphics.Bitmap;
> > > > import android.graphics.BitmapFactory;
> > > > import android.graphics.PixelFormat;
> > > > import android.hardware.Camera;
> > > > import android.hardware.Camera.AutoFocusCallback;
> > > > import android.os.Bundle;
> > > > import android.util.Log;
> > > > import android.view.MotionEvent;
> > > > import android.view.SurfaceHolder;
> > > > import android.view.SurfaceView;
> > > > import android.view.View;
> > > > import android.view.Window;
> > > > import android.view.WindowManager;
> > > > import android.view.View.OnTouchListener;
>
> > > > public class TakePicture extends Activity implements
> > > > SurfaceHolder.Callback{
> > > >      Camera mCamera;
> > > >      Boolean mPreviewRunning = false;
> > > >      int imageLayoutHeight;
> > > >      int imageLayoutWidth;
>
> > > >     �...@override
> > > >      public void onCreate(Bundle savedInstanceState) {
> > > >           super.onCreate(savedInstanceState);
>
> > > >           //setup camera surface
> > > >           getWindow().setFormat(PixelFormat.TRANSLUCENT);
> > > >           requestWindowFeature(Window.FEATURE_NO_TITLE);
>
> > > > getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
> > > > WindowManager.LayoutParams.FLAG_FULLSCREEN);
> > > >           setContentView(R.layout.cameralayout);
>
> > > >           SurfaceView mSurfaceView = (SurfaceView)
> > > > findViewById(R.id.hist_surface_camera);
> > > >           SurfaceHolder mSurfaceHolder = mSurfaceView.getHolder();
> > > >           mSurfaceHolder.addCallback(this);
>
> > > > mSurfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
> > > >           Bundle extras = getIntent().getExtras();
> > > >           imageLayoutHeight = extras.getInt("layoutHeight");
> > > >           imageLayoutWidth = extras.getInt("layoutWidth");
>
> > > >           OnTouchListener touchListener = new View.OnTouchListener() {
> > > >                public boolean onTouch(View v, MotionEvent e) {
>
> > > >                     System.out.println("MAKING PICTURE");
> > > >                     mCamera.autoFocus(cb);
> > > >                     return false;
> > > >                }
> > > >           };
>
> > > >           //setup touch listener
> > > >           mSurfaceView.setOnTouchListener(touchListener);
>
> > > >      }
>
> > > >      AutoFocusCallback cb = new AutoFocusCallback() {
> > > >           public void onAutoFocus(boolean success, Camera c) {
> > > >                c.takePicture(null, null, mPictureCallback);
> > > >           }
> > > >      };
>
> > > >      Camera.PictureCallback mPictureCallback = new
> > > > Camera.PictureCallback() {
> > > >           public void onPictureTaken(byte[] imageData, Camera c) {
> > > >                System.out.println("Picture taken, now
> > > > returning");
> > > >                Intent resultIntent = new Intent();
> > > >                resultIntent.putExtra("cameraImage", imageData);
> > > >                System.out.println("put Extra");
> > > >                setResult(Activity.RESULT_OK, resultIntent);
> > > >                finish();
> > > >           }
> > > >      };
>
> > > >      //initialize camera
> > > >      public void surfaceCreated(SurfaceHolder holder) {
> > > >           mCamera = Camera.open();
> > > >      }
>
> > > >      public void surfaceChanged(SurfaceHolder holder, int format, int
> > > > w, int h) {
> > > >           if (mPreviewRunning) {
> > > >                mCamera.stopPreview();
> > > >           }
>
> > > >           Camera.Parameters p = mCamera.getParameters();
>
> > > >           p.setPreviewSize(h, w);
> > > >           System.out.println("PreviewSize: " + h + "," + w);
> > > >           p.setPictureSize(h*3,w*3); // is around 1200x900
> > > >           p.set("rotation", 90);
> > > >           mCamera.setParameters(p);
>
> > > >           try {
> > > >                mCamera.setPreviewDisplay(holder);
> > > >           } catch (IOException e) {
> > > >                e.printStackTrace();
> > > >           }
>
> > > >           mCamera.startPreview();
> > > >           mPreviewRunning = true;
> > > >      }
>
> > > >      public void surfaceDestroyed(SurfaceHolder holder) {
> > > >           mCamera.stopPreview();
> > > >           mPreviewRunning = false;
> > > >           mCamera.release();
> > > >      }
>
> > > > }
>
> > > > And this is how I call the camera activity:
>
> > > > Intent intent = new Intent(mainActivity.this, TakePicture.class);
> > > > intent.putExtra("layoutWidth",layoutWidth);
> > > > intent.putExtra("layoutHeight",layoutHeight);
> > > > startActivityForResult(intent,0);
>
> > > > The onActivityResult is never reached because the error occurs during
> > > > the transition between intents.- Hide quoted text -
>
> > - Show quoted text -
>
>

-- 
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en

Reply via email to