2017-03-27 4 views
0

Ich schreibe eine Android App, wo zwei Geräte Bilder aus der Galerie über TCP austauschen müssen. Meine Frage ist, um getDrawable() zu verwenden, muss mein Bild im Drawable-Ordner sein? Oder kann ich die Methode mit Bildern aus der Galerie des Telefons verwenden? Vielen Dank im Voraus für die Tour-Hilfe. Bitte ertragen Sie mit mir, wenn die Frage zu dumm oder offensichtlich ist, bin ich nur ein Neuling.Kann ich getDrawable() mit Bildern aus der Galerie verwenden

+0

Imageimageview = (Image) findViewById (R.id.imageUpload); Bitmap bmp = ((BitmapDrawable) imageUpload.getDrawable()). GetBitmap(); – Melo

+0

Bitte sehen Sie meine Antwort unten. Hoffe es wird dir helfen zu verstehen. – FAT

Antwort

0
  1. Wenn Sie Bild von Drawable Ordner verwenden möchten, verwenden Sie ContextCompat.getDrawable().

    ImageView imageView = (ImageView)findViewById(R.id.imageUpload); 
    imageView.setImageDrawable(ContextCompat.getDrawable(this, R.drawable.IMAGE_NAME)); 
    
  2. Wenn Sie und Bild aus der Galerie verwenden auswählen möchten, verwenden Sie Intent mit ACTION_PICK:

    Intent intent = new Intent(Intent.ACTION_PICK); 
    intent .setType("image/*"); 
    startActivityForResult(intent , REQUEST_CODE); 
    
  3. In Kürze erhalten Sie Bildpfad bekommen imageUri von Intent in onActivityResult() Verfahren. Schließlich verwenden Sie imageView.setImageBitmap(), um bitmap auf ImageView zu zeigen.

    @Override 
    protected void onActivityResult(int reqCode, int resultCode, Intent data) { 
        super.onActivityResult(reqCode, resultCode, data); 
    
        if (resultCode == RESULT_OK) { 
         if (requestCode == REQUEST_CODE) { 
          try { 
           final Uri imageUri = data.getData(); 
           final InputStream imageStream = getContentResolver().openInputStream(imageUri); 
           final Bitmap selectedImage = BitmapFactory.decodeStream(imageStream); 
    
           imageView.setImageBitmap(selectedImage); 
          } catch (FileNotFoundException e) { 
           e.printStackTrace(); 
          } 
    
         } 
        } 
    } 
    

Vergessen Sie nicht die Erlaubnis in AndroidManifest.xml hinzuzufügen.

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/> 

UPDATE:

Um das Bild über TCP zu senden, konvertieren Sie Ihre bitmap-byte array und senden mit SOCKET mit DataOutputStream:

................. 
......................... 
Bitmap selectedImage = BitmapFactory.decodeStream(imageStream); 

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

OutputStream out = socket.getOutputStream(); 
DataOutputStream dos = new DataOutputStream(out); 
dos.writeInt(array.length); 
dos.write(array, 0, array.length); 
............ 
................... 

FYI, wenn Sie bitmap von imageView erhalten möchten . Versuchen Sie folgendes:

//Get bitmap from imageView 
Bitmap bitmap = ((BitmapDrawable)imageView.getDrawable()).getBitmap(); 

Einzelheiten: Send Image over TCP in android applications

Hope this helfen ~

+0

Vielen Dank für Ihre Antwort, was ich wirklich mit dem Bild machen möchte, ist es über TCP zu senden. Wenn ich die zweite und dritte Lösung verwende, kann ich das nicht schaffen. – Melo

+0

@Melo: Um ein Bild über 'TCP' zu senden, konvertieren Sie Ihre' Bitmap' in 'ByteArray' und senden Sie mit' SOCKET' mit 'DataOutputStream'. Bitte überprüfe meine aktualisierte Antwort. – FAT

Verwandte Themen