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
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? –
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
Moja odpowiedź była również jedna? Tak bardzo chciałem zielonego znaku. – mourad