0

Я пытаюсь сфотографировать и показать его в imageView.everything является совершенным, но камера вернется маленькое изображение, миниатюрное image.this мой исходный кодкамера вернуть небольшое изображение в андроида

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 в поле [data] дополнительное поле. Это полезно для приложений, которым требуется только небольшое изображение. Если присутствует 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 я могу переписать, чтобы показать полный изображение, не маленькое, в моем изображенииView? спасибо – BekaKK

+0

@Baggio: «Как я могу переписать, чтобы показать полное изображение, а не маленькое, в моем изображении?» - начиная с моего образца кода, в 'onActivityResult()', используйте свою любимую библиотеку загрузки изображений (например, Picasso), чтобы загрузить изображение в 'ImageView'. Вы знаете, где должно быть изображение, так как это файл, который вы использовали для 'Uri' для' EXTRA_OUTPUT'. – CommonsWare

+0

Я попробую, но я до сих пор не понимаю, почему камера возвращает небольшое изображение – BekaKK