2017-02-19 7 views
0

文法上の誤りがあります。ImageViewに表示されたときに写真の品質が失われる

写真を撮るためのアプリケーションを作成し、「OK」をクリックすると、画像がImageViewに表示されます。 今、Nexus 5Xでこのアプリケーションを試してみると、画像がImageViewに表示されたときに写真が品質を失う理由がわかりません。 アプリケーション画像(イメージビュー):Application Image カメラ画像:Real Image

断片コード:

public class CameraFragment extends Fragment{ 

@Nullable 
@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    dispatchTakePictureIntent(); 
    return inflater.inflate(R.layout.fragment_camera,container,false); 
} 

ImageView SkimmedImageImg; 
@Override 
public void onViewCreated(View view, Bundle savedInstanceState) { 
    super.onViewCreated(view, savedInstanceState); 
    SkimmedImageImg = (ImageView)view.findViewById(R.id.SkimmedImg); 
} 

static final int REQUEST_IMAGE_CAPTURE = 1; 

private void dispatchTakePictureIntent() { 
    Fragment CameraFragment = this; 
    Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
    CameraFragment.startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE); 
} 

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

    if(resultCode == Activity.RESULT_OK){ 
     if(requestCode == REQUEST_IMAGE_CAPTURE){ 
      Bitmap SkimmedImgData = (Bitmap) data.getExtras().get("data"); 
      SkimmedImageImg.setImageBitmap(SkimmedImgData); 
     } 
    } 
} 

}

+0

を私は新しい答えを追加しました。今回私はコードを実行し、それは完全に動作します。あなたはこれをチェックするかもしれません。 – tahsinRupam

答えて

0

ちょうどクラス全体をコピー&ペースト:

public class CameraFragment extends android.support.v4.app.Fragment{ 

    String mCurrentPhotoPath; 
    @Nullable 
    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     final int MyVersion = Build.VERSION.SDK_INT; 
     if (MyVersion > Build.VERSION_CODES.LOLLIPOP_MR1) { 
      if (!checkIfAlreadyhavePermission_new()) { 
       requestPermissions(new String[]{Manifest.permission.CAMERA}, 1); 
      } else { 
       if (!checkIfAlreadyhavePermission()) { 
        requestPermissions(new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, 2); 
       } else { 
        try { 
         dispatchTakePictureIntent(); 
        } catch (IOException e) { 
         e.printStackTrace(); 
        } 
       } 
      } 
     } else { 
      try { 
       dispatchTakePictureIntent(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
     } 

     return inflater.inflate(R.layout.fragment_camera,container,false); 
    } 

    ImageView SkimmedImageImg; 
    @Override 
    public void onViewCreated(View view, Bundle savedInstanceState) { 
     super.onViewCreated(view, savedInstanceState); 
     SkimmedImageImg = (ImageView)view.findViewById(R.id.SkimmedImg); 
    } 

    static final int REQUEST_IMAGE_CAPTURE = 1; 

    private void dispatchTakePictureIntent() throws IOException { 
     CameraFragment cameraFragment = this; 
     Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
     // Ensure that there's a camera activity to handle the intent 
     if (takePictureIntent.resolveActivity(getActivity().getPackageManager()) != null) { 
      // Create the File where the photo should go 
      File photoFile = null; 
      try { 
       photoFile = createImageFile(); 
      } catch (IOException ex) { 
       // Error occurred while creating the File 
       return; 
      } 
      // Continue only if the File was successfully created 
      if (photoFile != null) { 
       Uri photoURI = FileProvider.getUriForFile(getActivity(), 
         BuildConfig.APPLICATION_ID + ".provider", 
         createImageFile());; 
       takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, photoURI); 
       cameraFragment.startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE); 
      } 
     } 

    } 

    private boolean checkIfAlreadyhavePermission() { 
     int result = ContextCompat.checkSelfPermission(getActivity(), Manifest.permission.READ_EXTERNAL_STORAGE); 
     return result == PackageManager.PERMISSION_GRANTED; 
    } 

    private boolean checkIfAlreadyhavePermission_new() { 
     int result = ContextCompat.checkSelfPermission(getActivity(), Manifest.permission.CAMERA); 
     return result == PackageManager.PERMISSION_GRANTED; 
    } 

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

     if (resultCode == Activity.RESULT_OK) { 
      if (requestCode == REQUEST_IMAGE_CAPTURE) { 
       Uri imageUri = Uri.parse(mCurrentPhotoPath); 
       File file = new File(imageUri.getPath()); 
       Glide.with(getActivity()) 
        .load(file) 
        .into(SkimmedImageImg); 

       // ScanFile so it will be appeared on Gallery 
       MediaScannerConnection.scanFile(getActivity(), 
         new String[]{imageUri.getPath()}, null, 
         new MediaScannerConnection.OnScanCompletedListener() { 
          public void onScanCompleted(String path, Uri uri) { 
          } 
         }); 
      } 
     } 

    } 

    private File createImageFile() throws IOException { 
     // Create an image file name 
     String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date()); 
     String imageFileName = "JPEG_" + timeStamp + "_"; 
     File storageDir = new File(Environment.getExternalStoragePublicDirectory(
       Environment.DIRECTORY_DCIM), "Camera"); 
     File image = File.createTempFile(
       imageFileName, /* prefix */ 
       ".jpg",   /* suffix */ 
       storageDir  /* directory */ 
     ); 

     // Save a file: path for use with ACTION_VIEW intents 
     mCurrentPhotoPath = "file:" + image.getAbsolutePath(); 
     return image; 
    } 


    public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) { 
     switch (requestCode) { 
      case 1: { 
       // If request is cancelled, the result arrays are empty. 
       if (grantResults.length > 0 
         && grantResults[0] == PackageManager.PERMISSION_GRANTED) { 
        if (!checkIfAlreadyhavePermission()) { 
         requestPermissions(new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, 2); 
        } else { 
         try { 
          dispatchTakePictureIntent(); 
         } catch (IOException e) { 
          e.printStackTrace(); 
         } 
        } 
       } else { 
        Toast.makeText(getActivity(), "NEED CAMERA PERMISSION", Toast.LENGTH_LONG).show(); 
       } 
       break; 
      } 

      case 2: { 
       // If request is cancelled, the result arrays are empty. 
       if (grantResults.length > 0 
         && grantResults[0] == PackageManager.PERMISSION_GRANTED) { 
        try { 
         dispatchTakePictureIntent(); 
        } catch (IOException e) { 
         e.printStackTrace(); 
        } 
       } else { 
        Toast.makeText(getActivity(), "NEED STORAGE PERMISSION", Toast.LENGTH_LONG).show(); 
       } 
       break; 
      } 
      // other 'case' lines to check for other 
      // permissions this app might request 
     } 
    } 

} 

あなたはMainActivityでフラグメントのロード中にエラーを取得している場合は、単にgetSupportFragmentManager()を使用します

FragmentManager fm = getSupportFragmentManager(); 
+0

tahsinRupam、私があなたに前に(私はPCを壊した)あなたに答えなかったら私を許してください。 とにかく、別のアプリケーションに問題があります。もしこれが素晴らしいのであれば助けてください。 私は別の方法を知らないので、私はここにあなたに連絡しています、これはそれを行う良い方法ではない場合は私を許してください。 http://stackoverflow.com/questions/43237864/keeping-the-cpu-of-the-device-awake – RvGPredator

+0

大丈夫です。私はあなたを助けるために最善を尽くします。 – tahsinRupam

+0

申し訳ありませんが、その種のアプリについての経験はありません。それでも私はいくつかの知識を集めて、あなたに問題の解決策を提案しようとします。 – tahsinRupam

1

あなたがBitmap SkimmedImgData = (Bitmap) data.getExtras().get("data");を呼び出し、その後、SkimmedImageImg.setImageBitmap(SkimmedImgData);を使用して画像を設定し、あなたがしているだけ撮影した画像のサムネイルを設定すると、画質が非常に歪んでしまいます。フルサイズの画像を保存する方法を示すthisチュートリアルに従うことができます。フルサイズの写真を保存します。

+0

私はチュートリアルを読んで、私はこのようなことをしようとしました:http://pastebin.com/WRAzR71V しかし、私は断片的に作業していますので、いくつかのエラーが出ます。詳細はペーストをお読みください – RvGPredator

+0

'getActivity ''の代わりに 'this'' –

関連する問題