2016-11-08 75 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