2016-11-08 85 views
0

返回小图我试图拍照,并显示在imageView.everything是完美的,但相机返回小图像,缩略图image.this是我的源代码相机的Android

public class TestActivity extends Activity { 
private static final int REQUEST_TAKE_PHOTO = 5; 
private File mFileTemp; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_test); 

    takePic(); 
} 


@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 

    switch (requestCode) { 

     case REQUEST_TAKE_PHOTO: 
      if(data!=null && data.getExtras()!=null) 
      { 
       Bitmap bitmap = (Bitmap)data.getExtras().get("data"); 

       if(bitmap!=null) 
       { 

        ImageView imageView=(ImageView)findViewById(R.id.imageView); 
        imageView.setImageBitmap(bitmap); 


       } 
      } 

      break; 

    } 


} 
private String currentDateFormat(){ 
    SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd_HH_mm_ss"); 
    String currentTimeStamp = dateFormat.format(new Date()); 
    return currentTimeStamp; 
} 



private void takePic() { 
    Intent intent = new Intent("android.media.action.IMAGE_CAPTURE"); 
    startActivityForResult(intent, REQUEST_TAKE_PHOTO); 
} 





<ImageView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_centerInParent="true" 
    android:id="@+id/imageView"/> 

我不知道是什么一个错误的,我code.if任何人有解决方案帮我 感谢

回答

2

报价the documentation for ACTION_IMAGE_CAPTURE

调用者可以通过一个额外的EXTRA_OUTPUT来控制这个地方图像将被写入。 如果EXTRA_OUTPUT不存在,则将小尺寸图像作为Bitmap对象添加到的额外字段Bitmap中。这对于只需要小图像的应用程序很有用。如果存在EXTRA_OUTPUT,则全尺寸图像将被写入Uri的值EXTRA_OUTPUT

(重点和参考加入适当的额外名称)

您没有提供EXTRA_OUTPUT,所以你通过data额外得到了一个小图像。如果你想有一个全尺寸的图像,使用EXTRA_OUTPUT

/*** 
Copyright (c) 2008-2016 CommonsWare, LLC 
Licensed under the Apache License, Version 2.0 (the "License"); you may not 
use this file except in compliance with the License. You may obtain a copy 
of the License at http://www.apache.org/licenses/LICENSE-2.0. Unless required 
by applicable law or agreed to in writing, software distributed under the 
License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS 
OF ANY KIND, either express or implied. See the License for the specific 
language governing permissions and limitations under the License. 

From _The Busy Coder's Guide to Android Development_ 
https://commonsware.com/Android 
*/ 

package com.commonsware.android.camcon; 

import android.app.Activity; 
import android.content.ClipData; 
import android.content.Intent; 
import android.content.pm.PackageManager; 
import android.content.pm.ResolveInfo; 
import android.net.Uri; 
import android.os.Build; 
import android.os.Bundle; 
import android.provider.MediaStore; 
import android.support.v4.content.FileProvider; 
import java.io.File; 
import java.util.List; 

public class CameraContentDemoActivity extends Activity { 
    private static final String EXTRA_FILENAME= 
    "com.commonsware.android.camcon.EXTRA_FILENAME"; 
    private static final String FILENAME="CameraContentDemo.jpeg"; 
    private static final int CONTENT_REQUEST=1337; 
    private static final String AUTHORITY= 
    BuildConfig.APPLICATION_ID+".provider"; 
    private static final String PHOTOS="photos"; 
    private File output=null; 
    private Uri outputUri=null; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    Intent i=new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 

    if (savedInstanceState==null) { 
     output=new File(new File(getFilesDir(), PHOTOS), FILENAME); 

     if (output.exists()) { 
     output.delete(); 
     } 
     else { 
     output.getParentFile().mkdirs(); 
     } 
    } 
    else { 
     output=(File)savedInstanceState.getSerializable(EXTRA_FILENAME); 
    } 

    outputUri=FileProvider.getUriForFile(this, AUTHORITY, output); 

    if (savedInstanceState==null) { 
     i.putExtra(MediaStore.EXTRA_OUTPUT, outputUri); 

     if (Build.VERSION.SDK_INT>=Build.VERSION_CODES.LOLLIPOP) { 
     i.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION); 
     } 
     else if (Build.VERSION.SDK_INT>=Build.VERSION_CODES.JELLY_BEAN) { 
     ClipData clip= 
      ClipData.newUri(getContentResolver(), "A photo", outputUri); 

     i.setClipData(clip); 
     i.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION); 
     } 
     else { 
     List<ResolveInfo> resInfoList= 
      getPackageManager() 
      .queryIntentActivities(i, PackageManager.MATCH_DEFAULT_ONLY); 

     for (ResolveInfo resolveInfo : resInfoList) { 
      String packageName = resolveInfo.activityInfo.packageName; 
      grantUriPermission(packageName, outputUri, 
      Intent.FLAG_GRANT_WRITE_URI_PERMISSION); 
     } 
     } 

     startActivityForResult(i, CONTENT_REQUEST); 
    } 
    } 

    @Override 
    protected void onSaveInstanceState(Bundle outState) { 
    super.onSaveInstanceState(outState); 

    outState.putSerializable(EXTRA_FILENAME, output); 
    } 

    @Override 
    protected void onActivityResult(int requestCode, int resultCode, 
            Intent data) { 
    if (requestCode == CONTENT_REQUEST) { 
     if (resultCode == RESULT_OK) { 
     Intent i=new Intent(Intent.ACTION_VIEW); 

     i.setDataAndType(outputUri, "image/jpeg"); 
     i.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); 
     startActivity(i); 
     finish(); 
     } 
    } 
    } 
} 

(从this sample app

+0

感谢您的关注,但是这个代码开始onActivityResult.i有一个新的活动question.how我可以重写,以充分展示图像,不小,在我的imageView?谢谢 – BekaKK

+0

@Baggio:“我如何在我的imageView中重写以显示完整图像,而不是小图像?” - 从我的示例代码开始,在'onActivityResult()'中,使用您最喜欢的图像加载库(例如Picasso)将图像加载到'ImageView'中。你知道图像应该在哪里,因为它是'Uri'用于'EXTRA_OUTPUT'的文件。 – CommonsWare

+0

我会尝试,但我仍不明白为什么相机返回小图像 – BekaKK