2016-04-07 1 views
1

私のアプリで写真を撮るために、ACTION_IMAGE_CAPTUREの使い方を実装することができました。何らかの理由で、写真を撮ると、プレビュー画像(私のアプリに送り返される前にティック/クロスアイコンで表示された画像)は、私が管理している画像が正方形で本当に低解像度ですストレージに保存することはできません。私は、低品質の画像が返されることについて不平を言うすべての質問を終えています。すべての答えは、カメラアプリにフル品質のプレビューを使用するように指示するのではなく、アプリ自体で高品質の画像を取得する方法に関する解決策を示します。どんな助けでも大歓迎です!ACTION_IMAGE_CAPTUREを使用するとプレビュー画像がぼやける理由

答えて

0

ませんどのようにあなたが「完全な品質のプレビューを使用するには、」カメラアプリを教えするための方法がないためである完全な品質プレビュー

を使用するカメラアプリを伝えるために。

何千ものAndroid搭載機種が何千もあります。これらのデバイスモデルには何百ものカメラアプリが組み込まれており、Playストアなどの場所からダウンロードすることが可能です。 ACTION_IMAGE_CAPTUREの行動には、これらのアプリの開発者次第です:

  • 彼らは( 『それは私のアプリに送り返される前に、ダニ/クロスのアイコンで表示』)確認画面を持っているか否か

  • 画像が EXTRA_OUTPUTより

その他その確認画面でどのように見えるか

  • は、入力の面では他documented aspect to the ACTION_IMAGE_CAPTURE protocolが存在しない、ので、カメラのアプリは、他の何かを提供する必要はありません。

    何らかの理由で、特定のカメラアプリが特にうまく実装されていません。

  • +0

    これが来たデフォルトですウェブカメラを使用してアンドロイドエミュレータのraアプリ。 –

    +0

    @BenWainwright:それは答えを変えない。 – CommonsWare

    0

    以下のコードをチェックしてみてください。

    TakeImageActivity.java

    import java.io.File; 
    import java.text.SimpleDateFormat; 
    import java.util.ArrayList; 
    import java.util.Date; 
    import java.util.Locale; 
    
    import android.content.Intent; 
    import android.content.pm.PackageManager; 
    import android.database.Cursor; 
    import android.graphics.Bitmap; 
    import android.graphics.BitmapFactory; 
    import android.net.Uri; 
    import android.os.Bundle; 
    import android.os.Environment; 
    import android.provider.MediaStore; 
    import android.util.Log; 
    import android.view.View; 
    import android.view.View.OnClickListener; 
    import android.widget.Button; 
    import android.widget.ImageView; 
    import android.widget.Toast; 
    
    public class TakeImageActivity extends ActivityBase implements OnClickListener { 
    
        File file,mFileTemp; 
    
        Button buttonTakeImageCam; 
        ImageView imageView; 
        Uri mPhotoUri; 
        Bitmap thumbnail; 
        private Uri fileUri; 
        private static final String IMAGE_DIRECTORY_NAME = "PhotoEditor Camera"; 
        public static final int MEDIA_TYPE_IMAGE = 1; 
        @Override 
        protected void onCreate(Bundle savedInstanceState) { 
         // TODO Auto-generated method stub 
         super.onCreate(savedInstanceState); 
         setContentView(R.layout.take_image_activity); 
    
         file = new File(Environment.getExternalStorageDirectory() 
           .getAbsolutePath() + "/FrameImages"); 
    
         initializetion(); 
    
        } 
    
        private void initializetion() { 
         // TODO Auto-generated method stub 
         buttonTakeImageCam = (Button) findViewById(R.id.buttonTakeImageCam); 
         buttonTakeImageCam.setOnClickListener(this); 
    
         if (!isDeviceSupportCamera()) { 
          Toast.makeText(getApplicationContext(), 
            "Sorry! Your device doesn't support camera", 
            Toast.LENGTH_LONG).show(); 
          // will close the app if the device does't have camera 
          finish(); 
         } 
        } 
    
        private boolean isDeviceSupportCamera() { 
         if (getApplicationContext().getPackageManager().hasSystemFeature(
           PackageManager.FEATURE_CAMERA)) { 
          // this device has a camera 
          return true; 
         } else { 
          // no camera on this device 
          return false; 
         } 
        } 
    
        public Uri getOutputMediaFileUri(int type) { 
         return Uri.fromFile(getOutputMediaFile(type)); 
        } 
    
        private static File getOutputMediaFile(int type) { 
    
         // External sdcard location 
         File mediaStorageDir = new File(
           Environment 
             .getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), 
           IMAGE_DIRECTORY_NAME); 
    
         // Create the storage directory if it does not exist 
         if (!mediaStorageDir.exists()) { 
          if (!mediaStorageDir.mkdirs()) { 
           Log.d(IMAGE_DIRECTORY_NAME, "Oops! Failed create " 
             + IMAGE_DIRECTORY_NAME + " directory"); 
           return null; 
          } 
         } 
         String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss", 
           Locale.getDefault()).format(new Date()); 
         File mediaFile; 
         if (type == MEDIA_TYPE_IMAGE) { 
          mediaFile = new File(mediaStorageDir.getPath() + File.separator 
            + "IMG_" + timeStamp + ".jpg"); 
         } else { 
          return null; 
         } 
    
         return mediaFile; 
        } 
    
    
        @Override 
        public void onClick(View v) { 
         // TODO Auto-generated method stub 
    
         switch (v.getId()) { 
    
         case R.id.buttonTakeImageCam: 
          Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
    
          fileUri = getOutputMediaFileUri(MEDIA_TYPE_IMAGE); 
    
          intent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri); 
    
          // start the image capture Intent 
          startActivityForResult(intent, 2); 
          break; 
         default: 
          break; 
         } 
    
        } 
    
        @Override 
        protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
         // TODO Auto-generated method stub 
         if (resultCode != RESULT_OK) 
          return; 
    
         switch (requestCode) { 
    
         case 2: 
           if (resultCode == RESULT_OK) { 
            // successfully captured the image 
            // display it in image view 
            previewCapturedImage(); 
           } else if (resultCode == RESULT_CANCELED) { 
            // user cancelled Image capture 
            Toast.makeText(getApplicationContext(), 
              "User cancelled image capture", Toast.LENGTH_SHORT) 
              .show(); 
           } else { 
            // failed to capture image 
            Toast.makeText(getApplicationContext(), 
              "Sorry! Failed to capture image", Toast.LENGTH_SHORT) 
              .show(); 
           } 
          break; 
         } 
        } 
         private void previewCapturedImage() { 
          try { 
           // bimatp factory 
           BitmapFactory.Options options = new BitmapFactory.Options(); 
    
           // downsizing image as it throws OutOfMemory Exception for larger 
           // images 
           options.inSampleSize = 2; 
    
           final Bitmap bitmap = BitmapFactory.decodeFile(fileUri.getPath(), 
             options); 
    
            //Set image here 
           imgPreview.setImageBitmap(bitmap); 
    
          } catch (NullPointerException e) { 
           e.printStackTrace(); 
          } 
         } 
    
        public Bitmap getPreview(String fileName) { 
         File image = new File(fileName); 
    
         BitmapFactory.Options bounds = new BitmapFactory.Options(); 
         bounds.inJustDecodeBounds = true; 
         BitmapFactory.decodeFile(image.getPath(), bounds); 
         if ((bounds.outWidth == -1) || (bounds.outHeight == -1)) { 
          return null; 
         } 
         int originalSize = (bounds.outHeight > bounds.outWidth) ? bounds.outHeight 
           : bounds.outWidth; 
         BitmapFactory.Options opts = new BitmapFactory.Options(); 
         opts.inSampleSize = originalSize/64; 
         // opts.inSampleSize = originalSize; 
         return BitmapFactory.decodeFile(image.getPath()); 
        } 
    
        public String getPath(Uri uri) { 
         String[] projection = { MediaStore.Images.Media.DATA }; 
         Cursor cursor = managedQuery(uri, projection, null, null, null); 
         int column_index = cursor 
           .getColumnIndexOrThrow(MediaStore.Images.Media.DATA); 
         cursor.moveToFirst(); 
         return cursor.getString(column_index); 
        } 
    } 
    

    take_image_activity.xml

    <?xml version="1.0" encoding="utf-8"?> 
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
        xmlns:tools="http://schemas.android.com/tools" 
        android:layout_width="fill_parent" 
        android:layout_height="fill_parent" 
        android:layout_gravity="center" > 
    
        <Button 
         android:id="@+id/buttonTakeImageCam" 
         android:layout_width="wrap_content" 
         android:layout_height="wrap_content" 
         android:layout_centerVertical="true" 
         android:layout_centerHorizontal="true" 
         android:layout_marginTop="10dp" 
         android:textSize="25sp" 
         android:text="Camera"/> 
    
    </RelativeLayout> 
    

    のAndroidManifest.xml

    <?xml version="1.0" encoding="utf-8"?> 
    <manifest xmlns:android="http://schemas.android.com/apk/res/android" 
        package="com.camera.photo" 
        android:versionCode="1" 
        android:versionName="1.0" > 
    
        <uses-sdk 
         android:minSdkVersion="9" /> 
    
        <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
        <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> 
        <uses-permission android:name="android.permission.CAMERA"/> 
        <uses-feature android:name="android.hardware.camera" android:required="true"/> 
    
        <application 
         android:icon="@drawable/ic_launcher" 
         android:largeHeap="true" 
         android:label="@string/app_name" > 
         <activity 
          android:name=".TakeImageActivity" 
          android:hardwareAccelerated="false" 
          android:screenOrientation="portrait" 
          android:label="@string/app_name" > 
          <intent-filter> 
           <action android:name="android.intent.action.MAIN" /> 
    
           <category android:name="android.intent.category.LAUNCHER" /> 
          </intent-filter> 
         </activity> 
        </application> 
    
    </manifest> 
    
    関連する問題