2012-01-28 5 views
1

이 포럼에서이 질문을 여러 번 물었습니다. 그러나 여전히 나는 해결책을 얻을 수 없었다. 기본적으로 내 응용 프로그램에서 inbuilt 카메라 인 텐트를 호출하여 이미지를 캡처하고 이미지 뷰에 비트 맵을 표시하고 SD 카드에 저장합니다. 이제 내 폴더에있는 이미지는 작은 이미지와 같은 작은 이미지입니다.카메라에서 캡처 한 이미지가 최대 크기로 저장되지 않습니다.

내 코드

 Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
     startActivityForResult(Intent.createChooser(cameraIntent, "Select picture"), CAMERA_REQUEST); 

protected void onActivityResult(int requestCode, int resultCode, Intent data) { 

      try { 
     if (requestCode == CAMERA_REQUEST) { 
      Bitmap photo = (Bitmap) data.getExtras().get("data"); 

      if (photo != null) { 
       imageView.setImageBitmap(photo); 
      } 

      // Image name 

      final ContentResolver cr = getContentResolver(); 
      final String[] p1 = new String[] { MediaStore.Images.ImageColumns._ID, 
        MediaStore.Images.ImageColumns.DATE_TAKEN }; 
      Cursor c1 = cr.query(
        MediaStore.Images.Media.EXTERNAL_CONTENT_URI, p1, null, 
        null, p1[1] + " DESC"); 
      if (c1.moveToFirst()) { 
       String uristringpic = "content://media/external/images/media/" + c1.getInt(0); 
       Uri newuri = Uri.parse(uristringpic); 

       String snapName = getRealPathFromURI(newuri); 

       Uri u = Uri.parse(snapName); 

       File f = new File("" + u); 
       String fileName = f.getName(); 

       editTextPhoto.setText(fileName); 
       checkSelectedItem = true; 

       ByteArrayOutputStream bos = new ByteArrayOutputStream(); 
       photo.compress(CompressFormat.PNG, 0 /* ignored for PNG */, bos); 
       byte[] bitmapdata = bos.toByteArray(); 

       // Storing Image in new folder 
       StoreByteImage(mContext, bitmapdata, 100, fileName); 

       sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, 
         Uri.parse("file://" + Environment.getExternalStorageDirectory()))); 

       // Delete the image from the Gallery 

       getContentResolver().delete(newuri, null, null); 

      } 
      c1.close(); 

      } 
     } catch (NullPointerException e) { 
      System.out.println("Error in creating Image." + e); 

     } catch (Exception e) { 
      System.out.println("Error in creating Image." + e); 
     } 
     System.out.println("*** End of onActivityResult() ***"); 
    } 

     public String getRealPathFromURI(Uri contentUri) { 
      String[] proj = { MediaStore.Images.Media.DATA }; 
      Cursor cursor = managedQuery(contentUri, proj, null, null, null); 
      int column_index = cursor 
        .getColumnIndexOrThrow(MediaStore.Images.Media.DATA); 
      cursor.moveToFirst(); 
      return cursor.getString(column_index); 
     } 

     public boolean StoreByteImage(Context pContext, byte[] pImageData, 
       int pQuality, String pExpName) { 

      String nameFile = pExpName; 
      // File mediaFile = null; 
      File sdImageMainDirectory = new File(
        Environment.getExternalStorageDirectory() + "/pix/images"); 
      FileOutputStream fileOutputStream = null; 
      try { 

       BitmapFactory.Options options = new BitmapFactory.Options(); 
       options.inSampleSize = 0; 
       Bitmap myImage = BitmapFactory.decodeByteArray(pImageData, 0, 
         pImageData.length, options); 
       if (!sdImageMainDirectory.exists()) { 
        sdImageMainDirectory.mkdirs(); 
       } 

       sdImageMainDirectory = new File(sdImageMainDirectory, nameFile); 
       sdImageMainDirectory.createNewFile(); 

       fileOutputStream = new FileOutputStream(
         sdImageMainDirectory.toString()); 
       BufferedOutputStream bos = new BufferedOutputStream(
         fileOutputStream); 
       myImage.compress(CompressFormat.JPEG, pQuality, bos); 

       bos.flush(); 
       bos.close(); 

      } catch (FileNotFoundException e) { 
       Toast.makeText(pContext, e.getMessage(), Toast.LENGTH_LONG).show(); 
       e.printStackTrace(); 
      } catch (IOException e) { 
       Toast.makeText(pContext, e.getMessage(), Toast.LENGTH_LONG).show(); 
       e.printStackTrace(); 
      } 

하고 main.xml에있는 이미지 뷰 내가 작은 크기와 내 폴더에있는 이미지 뷰 이미지 저장소를 얻을이 코드

<ImageView 
     android:id="@+id/test_image" 
     android:src="@drawable/gray_pic" 
     android:layout_width="180dp" 
     android:layout_height="140dp" 
     android:layout_below="@id/edit2" 
     android:layout_toRightOf="@id/edit3" 
     android:layout_alignParentRight="true" 
     android:layout_marginTop="7dp" 
     android:layout_marginBottom="5dp" 
     android:layout_marginLeft="7dp" 
     android:layout_marginRight="7dp" 
     /> 

입니다. intent.putExtra를 추가하면 ImageView에 캡처 한 이미지도 새 폴더에 이미지도 생성되지 않습니다. 내가 .. 이것에 어떤 도움을 주시면 감사하겠습니다 강타하고 어디

Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 

String path = Environment.getExternalStorageDirectory().getAbsolutePath(); 
path += "/myFolder/myPicture.jpg"; 
File file = new File(path); 
Uri outputFileUri = Uri.fromFile(file); 
cameraIntent.putExtra("output", outputFileUri); 
startActivityForResult(Intent.createChooser(cameraIntent, "Select Picture"), CAMERA_REQUEST); 
} 

알고하지 마십시오.

답변

0

사용 카메라 의도로 :

Intent photoPickerIntent= new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
        photoPickerIntent.putExtra(MediaStore.EXTRA_OUTPUT, getTempFile()); 
        photoPickerIntent.putExtra("outputFormat", Bitmap.CompressFormat.JPEG.toString()); 
        photoPickerIntent.putExtra("return-data", true); 
        startActivityForResult(Intent.createChooser(photoPickerIntent,"Select Picture"),TAKE_PICTURE); 

// getTempFile()

private Uri getTempFile() { 
    //   if (isSDCARDMounted()) { 

      File root = new File(Environment.getExternalStorageDirectory(), "My Equip"); 
      if (!root.exists()) { 
       root.mkdirs(); 
      } 
      Log.d("filename",filename); 
      File file = new File(root,filename+".jpeg"); 

        muri = Uri.fromFile(file); 
        photopath=muri.getPath(); 
        Item1.photopaths=muri.getPath(); 

      Log.e("getpath",muri.getPath()); 
       return muri; 
    //   } else { 
    //   return null; 
       } 
       //} 
      private boolean isSDCARDMounted(){ 
       String status = Environment.getExternalStorageState(); 
       if (status.equals(Environment.MEDIA_MOUNTED)) 
       return true; 
       else 
       return false; 

       } 

그리고 답장을 보내 주셔서은 실제 이미지를 표시합니다, 귀하의 폴더에 확인 썸네일을 클릭

+0

감사 Abhi . 그러나 여전히 나는 같은 결과를 얻고있다. 폴더 자체가 생성되지 않습니다. 위의 코드에서 내 outputFileUri가 올바른지? 또한 imageview있는 이미지 축소판 가져 오기 ... 실제로 StoreByteImage() 메서드를 사용하여 폴더 및 저장소 이미지를 만드는 중입니다. 해당 메소드의 변경 사항은 모두 완료해야합니까? – Shrikant

+0

내 편집 된 질문보기, 그런 식으로 시도하십시오 – Abhi

+0

시도해보고 알려 드리겠습니다 .. – Shrikant

관련 문제