2014-12-23 1 views
0

Я хотел бы создать приложение, которое будет захватывать полноразмерную фотографию, а затем показать ее как миниатюру в этой деятельности. Но когда я запускаю приложение и фотографирую, он будет сохранен в галерее, но в миниатюре активности не появится.Java Android: сохранить полноразмерный Phorto и просмотреть масштабированное изображение - не отображается

public class MainActivity extends ActionBarActivity { 

public final static String EXTRA_MESSAGE = "com.example.myfirstapp2.MESSAGE"; 

private ImageView mImageView; 

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    mImageView = (ImageView) findViewById(R.id.imageView1); 
} 

public void takePhoto(View view) { 
    dispatchTakePictureIntent();  
} 

static final int REQUEST_TAKE_PHOTO = 1; 

private void dispatchTakePictureIntent() { 
    Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 

    if (takePictureIntent.resolveActivity(getPackageManager()) != null) { 
     File photoFile = null; 
     try { 
      photoFile = createImageFile(); 
     } catch (IOException ex) { 
      // Error occurred while creating the File 
     } 
     // Continue only if the File was successfully created 
     if (photoFile != null) { 
      takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, 
        Uri.fromFile(photoFile)); 
      startActivityForResult(takePictureIntent, REQUEST_TAKE_PHOTO); 
     } 
    } 
} 

String mCurrentPhotoPath; 
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 = Environment.getExternalStoragePublicDirectory(
      Environment.DIRECTORY_PICTURES); 
    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; 
} 

private void galleryAddPic() { 
    Intent mediaScanIntent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE); 
    File f = new File(mCurrentPhotoPath); 
    Uri contentUri = Uri.fromFile(f); 
    mediaScanIntent.setData(contentUri); 
    this.sendBroadcast(mediaScanIntent); 
} 

    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if (requestCode == REQUEST_TAKE_PHOTO && resultCode == RESULT_OK) {  
     handleBigCameraPhoto(); 
    } 
} 

private void handleBigCameraPhoto() 
{ 
    if (mCurrentPhotoPath != null) 
    { 
     setPic(); 
     galleryAddPic(); 
     mCurrentPhotoPath = null; 
    } 
} 

private void setPic() { 
    // Get the dimensions of the View 
    int targetW = mImageView.getWidth(); 
    int targetH = mImageView.getHeight(); 

    // Get the dimensions of the bitmap 
    BitmapFactory.Options bmOptions = new BitmapFactory.Options(); 
    bmOptions.inJustDecodeBounds = true; 
    BitmapFactory.decodeFile(mCurrentPhotoPath, bmOptions); 
    int photoW = bmOptions.outWidth; 
    int photoH = bmOptions.outHeight; 

    int scaleFactor = 1000; 
    if (targetH > 0) { 
     scaleFactor = Math.min(photoW/targetW, photoH/targetH); 
    } 
    // Decode the image file into a Bitmap sized to fill the View 
    bmOptions.inJustDecodeBounds = false; 
    bmOptions.inSampleSize = scaleFactor; 
    bmOptions.inPurgeable = true; 

    /* Decode the JPEG file into a Bitmap */ 
    Bitmap bitmap = BitmapFactory.decodeFile(mCurrentPhotoPath, bmOptions); 
    /* Associate the Bitmap to the ImageView */ 
    mImageView.setImageBitmap(bitmap); 
} 


protected void onSaveInstanceState(Bundle State) { 
    super.onSaveInstanceState(State); 
    State.putString("filepath", mCurrentPhotoPath); 
} 

protected void onRestoreInstanceState(Bundle state) { 
    super.onRestoreInstanceState(state); 
    mCurrentPhotoPath = state.getString("filepath"); 
    setPic(); 
} 

ImageView в макете деятельности определяется следующим образом:

<ImageView 
    android:id="@+id/imageView1" 
    android:contentDescription="@string/desc" 
    android:layout_width="200dp" 
    android:layout_height="100dp" /> 

ответ

0

Вы случайно добавили «файл:» без всякой причины.

mCurrentPhotoPath = "file:" + image.getAbsolutePath();

+0

Я добавил его после того, как mImageView.setImageBitmap (растровый); но все равно ничего не изменилось. Область ImageView по-прежнему пуста. – Michal22

+0

whoa, ваше приложение падает? – tachyonflux

+0

При использовании только: mCurrentPhotoPath = image.getAbsolutePath(); миниатюрная работа :) Thnak You! Еще одна проблема - когда я меняю поворот дисплея, миниатюра исчезнет. Не могли бы вы посоветовать, как с этим бороться? – Michal22

 Смежные вопросы

  • Нет связанных вопросов^_^