5

Udało mi się zrobić zdjęcie za pomocą aparatu lub zrobić zdjęcie z galerii i pokazać je w ImageView przy użyciu tego kodu. Muszę teraz użyć tego obrazu i przesłać go do analizy. Odwiedzałem tu i tam, aby to zrobić, i nie znalazłem odpowiedniego sposobu na zrobienie tego. Czy ktoś mógłby mi z tym pomóc? Czy możliwe jest przesłanie obrazu z ImageView? Dziękuję Ci.Jak przesłać obraz do analizy w Androidzie?

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 

Odpowiedz

2

czytanie odpowiedź:

Już po kod, który trzeba wcześniej. Udało mi się przesłać obraz do przeanalizowania. ale nie wiem, jak zmienić źródło losowania na moje zdjęcie z kamery/galerii lub widoku obrazu. - Stanley Santoso

do:

Abhishek Bansal

Rozumiem, że problem nie jest analizowanie swój wizerunek?

Aby spróbować odpowiedzieć na pytanie:

nie wiem jak przełączyć źródło rozciągliwej być mój obraz z kamery/galerii lub ImageView.

1 - R.drawable.androidbegin wydaje się być problemu, ale faktem jest, że masz już swoją bitmapę do analizowania w kodzie:

z galerii ->

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

z aparatem ->

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

2 - Tak bym su ggest zadeklarować zmienną typu Bitmap na początku kodu

private Bitmap yourbitmap; 

3 - następnie przypisać bitmapę do galerii i aparat w kodzie i użyć go, aby go przetworzyć.

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

4 - wreszcie można użyć bitmapy tak:

// 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

Dziękuję bardzo. to działa. Nie zdawałem sobie sprawy, że są one źródłem moich obrazów, ponieważ format wygląda zupełnie inaczej. Udało mi się umieścić kod do przesłania pod obudową wewnątrz onActivityForResult na dole. Czy można to zrobić poza OnActivityForResult? Myślę, że muszę to zrobić w onCreate, aby móc parsować inne informacje (nazwę użytkownika i zawartość) jednym kliknięciem, aby przejść do tego samego obiektu/klasy. i ten kod oznacza, że ​​jeśli wybrałem obraz z galerii, a następnie zmieniłem zdanie, zamiast zrobić zdjęcie, będę przesyłać 2 obrazy. Jak to zrobić, więc przesyłam tylko 1 obraz? –

+0

cześć, tak, możesz użyć kodu do przesyłania w swojej własnej funkcji, a następnie możesz odnieść się do niego z dowolnego miejsca. Na przykład: private myUploading() {// Konwertuj na bajt Strumień ByteArrayOutputStream = new ByteArrayOutputStream(); // Kompresuj obraz do niższej skali jakości 1 - 100 plik_hasktop.tak (Bitmap.CompressFormat.PNG, 100, strumień); bajt [] image = stream.toByteArray(); ...} I w twojej onActivityResult przed każdą przerwą; nawiązujesz połączenie z wysyłaniem za pomocą: myUploading(); Voilà. – mourad

+0

Moja odpowiedź była również jedna? Tak bardzo chciałem zielonego znaku. – mourad

2

Istnieją dobre tutoriale dostępne w Internecie. Zasadniczo Oto co trzeba zrobić

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(); 

źródło: this tutorial

patrz także pytanie How to upload an image in parse server using parse api in android

+0

Już po kod, który trzeba wcześniej. Udało mi się przesłać obraz do przeanalizowania. ale nie wiem, jak zmienić źródło losowania na moje zdjęcie z kamery/galerii lub widoku obrazu. –

0

Kliknij here aby uzyskać bibliotekę AsyncHttpClient i przesłać swoje zdjęcie. to tłuszcze, aby przesłać obraz.

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"); 
          } 
         }); 


    }