5

Sono stato in grado di scattare una foto utilizzando una fotocamera o prendere da una galleria e mostrarlo in un ImageView utilizzando questo codice. Quello che devo fare ora è usare quella foto e caricarla su Parse. Ho cercato qua e là a fare questo, e non ho trovato il modo giusto per farlo. Qualcuno può aiutarmi per favore con questo? È possibile caricare l'immagine da ImageView? Grazie.Come caricare l'immagine in Parse in Android?

protected Button mFromCamera; 
protected Button mFromGallery; 
protected ImageView mImageView; 

private static final int CAMERA_REQUEST = 1888; 
private static final int SELECT_PHOTO = 100; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState); 
setContentView(R.layout.activity_main); 


//Initialize ImageView 
mImageView = (ImageView) findViewById(R.id.ImgPrev); 
//Initialize Camera 
mFromCamera = (Button) findViewById(R.id.FromCamera); 

//use camera 
mFromCamera.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 
     startActivityForResult(cameraIntent, CAMERA_REQUEST); 
    } //use camera end 

}); 

//initialize button 
mFromGallery = (Button) findViewById(R.id.FromGallery); 

//pick a photo 
mFromGallery.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View arg0) { 
     Intent photoPickerIntent = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); 
     photoPickerIntent.setType("image/*"); 
     startActivityForResult(photoPickerIntent, SELECT_PHOTO); 
    } 
});//pick a photo end 
} 



//previewing Image 
@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
super.onActivityResult(requestCode, resultCode, data); 
switch (requestCode) { 
    //from the gallery 
    case SELECT_PHOTO: 
     if (requestCode == SELECT_PHOTO && resultCode == RESULT_OK && null!= data) { 
      Uri selectedImage = data.getData(); 
      String[] filePathColumn = { MediaStore.Images.Media.DATA }; 

      Cursor cursor = getContentResolver().query(selectedImage, 
        filePathColumn, null, null, null); 
      cursor.moveToFirst(); 

      int columnIndex = cursor.getColumnIndex(filePathColumn[0]); 
      String picturePath = cursor.getString(columnIndex); 
      cursor.close(); 

      mImageView.setImageBitmap(BitmapFactory.decodeFile(picturePath)); 
     } 
     break; 
    //from the camera 
    case CAMERA_REQUEST: 
     if (requestCode == CAMERA_REQUEST && resultCode == RESULT_OK) { 
      Bitmap photo = (Bitmap) data.getExtras().get("data"); 
      mImageView.setImageBitmap(photo); 
     } 
     break; 
} 
}//Preview Image End 

risposta

2

leggere la tua risposta:

ho già seguito il codice che avete davanti. Sono stato in grado di caricare l'immagine da analizzare. ma non so come cambiare la fonte drawable da essere la mia immagine da camera/galleria o imageview. - stanley Santoso

a:

Abhishek Bansal

ho capito che il problema non è l'analisi la vostra immagine?

Per cercare di rispondere alla tua domanda:

Non so come passare la fonte drawable essere la mia immagine dalla fotocamera/galleria o ImageView.

1 - R.drawable.androidbegin sembra essere il problema, ma il fatto è che avete già la vostra bitmap per analizzare nel codice:

dalla galleria ->

mImageView.setImageBitmap(BitmapFactory.decodeFile(picturePath)); 

dalla macchina fotografica ->

Bitmap photo = (Bitmap) data.getExtras().get("data"); 

2 - così mi do ggest Per dichiarare una variabile di tipo Bitmap all'inizio del vostro codice

private Bitmap yourbitmap; 

3 - quindi assegnare la bitmap per la galleria e la macchina fotografica nel codice e utilizzarlo per analizzarlo.

... 
yourbitmap = BitmapFactory.decodeFile(picturePath); 
... 
yourbitmap = (Bitmap) data.getExtras().get("data"); 
... 

4 - finalmente è possibile utilizzare il bitmap in questo modo:

// Bitmap bitmap = BitmapFactory.decodeResource(getResources(), 
//       R.drawable.androidbegin); 
    // Convert it to byte 
        ByteArrayOutputStream stream = new ByteArrayOutputStream(); 
        // Compress image to lower quality scale 1 - 100 
        yourbitmap.compress(Bitmap.CompressFormat.PNG, 100, stream); 
        byte[] image = stream.toByteArray(); 
      ... 
+0

Grazie mille. questo funziona Non mi rendevo conto che quelli sono la fonte delle mie immagini dal momento che il formato sembra molto diverso. Sono stato in grado di inserire il codice di caricamento sotto il case all'interno di onActivityForResult in basso. È possibile farlo al di fuori di onActivityForResult? Penso di aver bisogno di farlo su onCreate in modo da poter analizzare altre informazioni (nome utente e materiale) in un clic in modo che vadano allo stesso oggetto/classe. e questo codice significa, se ho scelto un'immagine da una galleria, poi ho cambiato idea per scattare una foto, invece, caricherò 2 immagini. Come faccio a farlo, quindi carico solo 1 immagine? –

+0

ciao, sì è possibile utilizzare il codice di caricamento nella propria funzione, quindi è possibile fare riferimento da dove vuoi. Ad esempio: private myUploading() {// Converti in byte ByteArrayOutputStream stream = new ByteArrayOutputStream(); // Comprime l'immagine in scala di qualità inferiore 1 - 100 yourbitmap.compress (Bitmap.CompressFormat.PNG, 100, stream); byte [] image = stream.toByteArray(); ...} E nel tuo onActivityResult prima di ogni interruzione; fai una chiamata al caricamento con: myUploading(); Ecco. – mourad

+0

Anche la mia risposta era quella? Volevo tanto il marchio verde. – mourad

2

ci sono buoni tutorial disponibili su internet. Essenzialmente segue è ciò che devi fare

Bitmap bitmap = BitmapFactory.decodeResource(getResources(), 
         R.drawable.androidbegin); 
       // Convert it to byte 
       ByteArrayOutputStream stream = new ByteArrayOutputStream(); 
       // Compress image to lower quality scale 1 - 100 
       bitmap.compress(Bitmap.CompressFormat.PNG, 100, stream); 
       byte[] image = stream.toByteArray(); 

       // Create the ParseFile 
       ParseFile file = new ParseFile("androidbegin.png", image); 
       // Upload the image into Parse Cloud 
       file.saveInBackground(); 

       // Create a New Class called "ImageUpload" in Parse 
       ParseObject imgupload = new ParseObject("ImageUpload"); 

       // Create a column named "ImageName" and set the string 
       imgupload.put("ImageName", "AndroidBegin Logo"); 

       // Create a column named "ImageFile" and insert the image 
       imgupload.put("ImageFile", file); 

       // Create the class and the columns 
       imgupload.saveInBackground(); 

fonte: this tutorial

vedi anche questa domanda How to upload an image in parse server using parse api in android

+0

ho già seguito il codice che avete davanti. Sono stato in grado di caricare l'immagine da analizzare. ma non so come cambiare la fonte drawable da essere la mia immagine da camera/galleria o imageview. –

0

Clicca here per ottenere biblioteca AsyncHttpClient e caricare la tua immagine. sono i grassi per caricare la tua immagine.

public void uploadImage(Bitmap img_bit) 
{ 
    AsyncHttpClient imgupload = new AsyncHttpClient(); 
    RequestParams params = new RequestParams(); 
     if (img_bit != null) { 

      byte[] imagebyte; 
      ByteArrayOutputStream bao = new ByteArrayOutputStream(); 
      img_bit.compress(Bitmap.CompressFormat.PNG, 100, bao); 
      imagebyte = bao.toByteArray(); 
      params.put("image", new ByteArrayInputStream(imagebyte), "test"+ System.currentTimeMillis() + ".png"); 
     } 
     imgupload.post("url",params, new AsyncHttpResponseHandler() { 

          @Override 
          public void onSuccess(int arg0, Header[] arg1, 
            byte[] arg2) { 
           System.out.println("Image Upload successfully"); 
          } 

          @Override 
          public void onFailure(int arg0, Header[] arg1, 
            byte[] arg2, Throwable arg3) { 
           System.out.println("faile the data"); 
          } 
         }); 


    }