有关我的申请,我会用我自己的相机类拍摄图像和我自己的数据库,但很快我真的不能跟上变化了,我决定使用内置的摄像头应用程序在Android中做的工作,但我似乎无法得到它来保存文件。我缺少的是在这里吗?该应用程序似乎保存文件,但它只是0字节。我抬头相机应用程序的源代码,它是寻找Extras中的“输出”,以保存该文件。任何帮助,将不胜感激。

Public class CameraTest extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        Button cameraButton = (Button) findViewById(R.id.cameraButton);
        cameraButton.setOnClickListener( new OnClickListener(){
            public void onClick(View v ){
                ContentValues values = new ContentValues();
                values.put(Images.Media.TITLE, "title");
                values.put(Images.Media.BUCKET_ID, "test");
                values.put(Images.Media.DESCRIPTION, "test Image taken");
                Uri uri = getContentResolver().insert(Media.EXTERNAL_CONTENT_URI, values);
                Intent intent = new Intent("android.media.action.IMAGE_CAPTURE");
                intent.putExtra("output", uri.getPath());
                startActivityForResult(intent,0);
            }
        });

    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (requestCode== 0 && resultCode == Activity.RESULT_OK){
            ((ImageView)findViewById(R.id.pictureView)).setImageURI(data.getData());
        }
    }


}
有帮助吗?

解决方案

这曾与下面的代码,理所当然我是与最后一个有点哑。我仍然认为我们有了一个更好的办法,使原来的图像仍然保存的地方。它仍然向我发送较小的25%的尺寸的图像。

public class CameraTest extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    Button cameraButton = (Button) findViewById(R.id.cameraButton);
    cameraButton.setOnClickListener( new OnClickListener(){
        public void onClick(View v ){

            Intent intent = new Intent("android.media.action.IMAGE_CAPTURE");

            startActivityForResult(intent,0);
        }
    });

}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode== 0 && resultCode == Activity.RESULT_OK) {
        Bitmap x = (Bitmap) data.getExtras().get("data");
        ((ImageView)findViewById(R.id.pictureView)).setImageBitmap(x);
        ContentValues values = new ContentValues();
        values.put(Images.Media.TITLE, "title");
        values.put(Images.Media.BUCKET_ID, "test");
        values.put(Images.Media.DESCRIPTION, "test Image taken");
        values.put(Images.Media.MIME_TYPE, "image/jpeg");
        Uri uri = getContentResolver().insert(Media.EXTERNAL_CONTENT_URI, values);
        OutputStream outstream;
        try {
            outstream = getContentResolver().openOutputStream(uri);
            x.compress(Bitmap.CompressFormat.JPEG, 70, outstream);
            outstream.close();
        } catch (FileNotFoundException e) {
            //
        } catch (IOException e) {
            //
        }
    }
}

另外,我知道Android的蛋糕发行应该很快修复图像尺寸小。

其他提示

下面的代码将启动默认相机和具有相机的图像保存到指定的URI。关键是把多余的“MediaStore.EXTRA_OUTPUT”与所需URI沿着。

File file = new File(Environment.getExternalStorageDirectory().getPath() + "/Images/" + image_name + ".jpg");
Uri imageUri = Uri.fromFile(file);

Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);

startActivityForResult(intent, 0);

在你的第一次尝试,这可能是因为当它读取你的“输出”额外的摄像头应用程序崩溃,因为它希望它是一个开放的,当你提供一个字符串。摄像头应用程序似乎捕捉后的照片读取额外的标志。你应该只提供URI,而不是uri.getPath()。那么,既然你已经知道的URI的照片,它不会在onResult调用返回。需要记住的URI中的成员变量。

在第二次尝试,你会得到一个按比例缩小(50%)的位图回来。它主要用于看法。我认为,全尺寸的位图是应用程序的内存预算过大。这可以是用于缩减的原因。

FYI,发现这对文档: 调用者可以通过一个额外的EXTRA_OUTPUT为了控制这个图像将被写入。如果EXTRA_OUTPUT不存在,则一个小尺寸的图像被返回作为额外字段Bitmap对象。这对于那些只需要一个小图像应用。如果EXTRA_OUTPUT存在,则全尺寸的图像将被写入到EXTRA_OUTPUT的URI值。

位于: http://developer.android.com/reference/机器人/提供者/ MediaStore.html

,以便应用程序可以保存原图为你,如果你告诉它在哪里。

**编辑:这不是与HTC装置的情况。 HTC(没有关系)使用的HTC Sense UI已经从Android 1.5的分支,并携带一个错误,始终保存图像中的低分辨率。你可以为相机午餐活动,并使用共享功能从相机使用全尺寸的图像。

我得到了相同的问题的模拟器, 我试图在一个真正的手机,它的工作, 也许这是因为虚拟电话真的不能采取Picures。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top