ALL,
我有以下代码:
try
{
Intent captureIntent = new Intent( android.provider.MediaStore.ACTION_IMAGE_CAPTURE );
File storage = Environment.getExternalStoragePublicDirectory( Environment.DIRECTORY_PICTURES );
cameraImageFiles = File.createTempFile( "user_photo", ".png", storage );
captureIntent.putExtra( MediaStore.EXTRA_OUTPUT, Uri.fromFile( cameraImageFiles ) );
final Intent galleryIntent = new Intent();
galleryIntent.setType( "image/*" );
galleryIntent.setAction( Intent.ACTION_GET_CONTENT );
Intent photoIntent = Intent.createChooser( galleryIntent, "Select or take a new picture" );
photoIntent.putExtra( Intent.EXTRA_INITIAL_INTENTS, new Intent[] { captureIntent } );
startActivityForResult( photoIntent, CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE );
}
catch( IOException e )
{
Utils.displayErrorDialog( context, e.getMessage() );
}
网上的每个例子都在谈论当只有一个意图时从相机中检索图像。
在这里,我有一个IntentChooser可以在图库图像之间进行选择,或者用相机拍摄新照片。据我所知,使用此代码我将无法简单地获取图像,因为在" onActivityResult()"我应该将图片保存到文件中 - 它不会自动保存。
现在我想做的是从相机拍摄中获取图像。我真的不在乎它是否会被保存 - 我只想要一张照片。
我知道如何从图库中获取图像 - 我有这个代码并且它有效。但是从相机中获取图像现在就是一个难题。
谢谢。
[编辑] 这是我放在onActivityResult()
中的代码@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
if( requestCode == CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE )
{
if( resultCode == RESULT_OK )
{
Uri uri = null;
if( data == null )
{
if( cameraImageFiles.exists() )
{
uri = Uri.fromFile( cameraImageFiles );
InputStream input;
try
{
input = getContentResolver().openInputStream( uri );
BitmapFactory.Options opts = new BitmapFactory.Options();
opts.inJustDecodeBounds = true;
bmp = BitmapFactory.decodeStream( input, null, opts );
input.close();
int height = opts.outHeight;
int width = opts.outWidth;
int inSampleSize = 1;
int reqHeight = camera.getHeight();
int reqWidth = camera.getWidth();
if( height > reqHeight || width > reqWidth )
{
int halfHeight = height / 2;
int halfWidth = width / 2;
while( ( halfHeight / inSampleSize ) > reqHeight && ( halfWidth / inSampleSize ) > reqWidth )
inSampleSize *= 2;
}
opts.inSampleSize = inSampleSize;
opts.inJustDecodeBounds = false;
bmp = BitmapFactory.decodeStream( input, null, opts );
camera.setImageBitmap( bmp );
}
catch( FileNotFoundException e )
{
Utils.displayErrorDialog( this, e.getMessage() );
}
catch( IOException e )
{
Utils.displayErrorDialog( this, e.getMessage() );
}
}
photoReady = true;
}
执行后,代码将null设为bmp,因此我猜想图像未保存。
[/编辑]
答案 0 :(得分:0)
相机会将拍摄的照片保存在磁盘上,但它不会是PNG,它将是Jpeg。此外,如果您使用ACTION_IMAGE_CAPTURE,数据将不会为null,因此您的代码根本不起作用。此外,应谨慎启动摄像头捕获意图,以避免捕获许多设备的well documented bug。请参阅https://stackoverflow.com/a/16433874/192373及其周围。
请注意,ACTION_GET_CONTENT需要对KitKat进行特殊处理,ACTION_OPEN_DOCUMENT可能会提供更好的服务,请参阅https://stackoverflow.com/a/20177611/192373