我可以将getDrawable()与图库中的图像一起使用

时间:2017-03-27 18:55:02

标签: android image tcp

我正在编写一个Android应用程序,其中两个设备必须通过tcp从库中交换图像。我的问题是,要使用getDrawable(),我的图像必须在Drawable文件夹中?或者我可以使用手机图库中的图像方法?提前感谢您的旅行帮助。如果问题太愚蠢或明显,请耐心等待我,我只是一个新手。

1 个答案:

答案 0 :(得分:0)

  1. 如果您想使用Drawable文件夹中的图片,请使用ContextCompat.getDrawable()

    ImageView imageView = (ImageView)findViewById(R.id.imageUpload);
    imageView.setImageDrawable(ContextCompat.getDrawable(this, R.drawable.IMAGE_NAME));
    
  2. 如果您想从图库中挑选和使用图片,请将IntentACTION_PICK一起使用:

    Intent intent = new Intent(Intent.ACTION_PICK);
    intent .setType("image/*");
    startActivityForResult(intent , REQUEST_CODE);
    
  3. 您将在imageUri方法中从Intent获取图片路径onActivityResult()。最后使用imageView.setImageBitmap()bitmap上显示ImageView

    @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();
                }
    
            }
        } 
    }
    
  4. 不要忘记在AndroidManifest.xml添加权限。

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

    <强>更新

    要通过TCP发送图片,请将bitmap转换为byte array,然后使用SOCKET DataOutputStream发送<{1}}:

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

    仅供参考,如果您想从bitmap获取imageView。试试这个:

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

    详细信息:Send Image over TCP in android applications

    希望这会有所帮助〜